在模板助手中使用Meteor功能会产生错误

时间:2016-01-17 16:43:14

标签: templates meteor helper

我在模板助手中尝试使用Meteor功能(本例中为Session)时遇到了麻烦。

Template.friendList.helpers({
'friends': function(){
    return Meteor.user().profile.friends;
},
'selected': function(){
    debugger;
    var isSelected = Session.equals('selectedFriend', this);

    return isSelected ? 'active' : '' ;
}
});

执行此代码会给我以下两个错误:

TypeError: Meteor.user(...) is undefined
Traza de la pila:
.friends@http://localhost:3000/app/client/ask/left/friendList.js?7383955f3a0a4e16805f78cf001a80239bc1ddc6:17:20
bindDataContext/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2986:14
Blaze._wrapCatchingExceptions/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1650:14
wrapHelper/</<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:3038:14
Template._withTemplateInstanceFunc@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:3671:12
wrapHelper/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:3037:1
Spacebars.call@http://localhost:3000/packages/spacebars.js?1aedcc2aa3ae9ff5d860d73516110cedd77c033e:167:12
Template.friendList</<@http://localhost:3000/app/client/ask/left/template.friendList.js?8c20bf90b0e5df348201891218a57c7259d3c32e:8:12
Blaze.Each/</<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2751:17
viewAutorun/</<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1872:18
Template._withTemplateInstanceFunc@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:3671:12
viewAutorun/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1870:1
Blaze._withCurrentView@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2211:12
viewAutorun@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1869:1
Tracker.Computation.prototype._compute@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:349:5
Tracker.Computation@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:237:5
Tracker.autorun@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:588:11
Blaze.View.prototype.autorun@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1882:14
Blaze.Each/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2748:1
fireCallbacks@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1952:1
Tracker.nonreactive@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:615:12
Blaze._fireCallbacks/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1949:5
Blaze._withCurrentView@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2211:12
Blaze._fireCallbacks@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1948:3
Blaze._createView@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1966:3
Blaze._materializeView@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2011:3
materializeDOMInner@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1473:9
Blaze._materializeDOM@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1415:3
Blaze._materializeDOM@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1424:7
Blaze._materializeView/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2053:25
Tracker.nonreactive@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:615:12
Blaze._materializeView@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2017:3
Blaze.render@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2310:3
@http://localhost:3000/app/client/ask/left/askLeft.js?0ea57e51a604dff2305f4beb8ee3776e7cbacc29:18:23
fireCallbacks/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:3330:9
Template._withTemplateInstanceFunc@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:3671:12
fireCallbacks@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:3326:1
Template.prototype.constructView/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:3419:5
Blaze.View.prototype.onViewReady/fire/</<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1780:11
Blaze._withCurrentView@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2211:12
Blaze.View.prototype.onViewReady/fire/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1779:9
Tracker._runFlush@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:523:11
onGlobalMessage@http://localhost:3000/packages/meteor.js?9730f4ff059088b3f7f14c0672d155218a1802d4:365:11
 friendList.js:19
Error: ReactiveDict.equals: value must be scalar
Traza de la pila:
.equals@http://localhost:3000/packages/reactive-dict.js?8210a4b2fa52dbde9b3c8cf6b296192a34d7b899:149:1
.selected@http://localhost:3000/app/client/ask/left/friendList.js?7383955f3a0a4e16805f78cf001a80239bc1ddc6:25:30
bindDataContext/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2986:14
Blaze._wrapCatchingExceptions/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1650:14
wrapHelper/</<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:3038:14
Template._withTemplateInstanceFunc@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:3671:12
wrapHelper/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:3037:1
Spacebars.call@http://localhost:3000/packages/spacebars.js?1aedcc2aa3ae9ff5d860d73516110cedd77c033e:167:12
Spacebars.mustacheImpl@http://localhost:3000/packages/spacebars.js?1aedcc2aa3ae9ff5d860d73516110cedd77c033e:104:10
Spacebars.mustache@http://localhost:3000/packages/spacebars.js?1aedcc2aa3ae9ff5d860d73516110cedd77c033e:108:16
Template.friendList</</<.class@http://localhost:3000/app/client/ask/left/template.friendList.js?8c20bf90b0e5df348201891218a57c7259d3c32e:12:38
Blaze._withCurrentView@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2211:12
.visitAttribute@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2139:1
.visitAttributes@http://localhost:3000/packages/htmljs.js?fd1566f5a5a4b277eb93f0a636a84a07ab9a83db:221:24
.visitAttributes@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2133:12
Blaze._expandAttributes@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2161:1
materializeTag/updateAttributes@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1517:27
viewAutorun/</<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1872:18
Template._withTemplateInstanceFunc@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:3671:12
viewAutorun/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1870:1
Blaze._withCurrentView@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2211:12
viewAutorun@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1869:1
Tracker.Computation.prototype._compute@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:349:5
Tracker.Computation@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:237:5
Tracker.autorun@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:588:11
Blaze.View.prototype.autorun@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1882:14
materializeTag@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1530:9
materializeDOMInner@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1445:24
Blaze._materializeDOM@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1415:3
Blaze._materializeDOM@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1424:7
Blaze._materializeView/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2053:25
Tracker.nonreactive@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:615:12
Blaze._materializeView@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2017:3
Blaze.Each/</eachView.stopHandle<.addedAt/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2791:25
Tracker.nonreactive@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:615:12
Blaze.Each/</eachView.stopHandle<.addedAt@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2764:9
diffArray/<.addedBefore@http://localhost:3000/packages/observe-sequence.js?cd318009bd759e1458173f84a537c5dd315b4f86:223:1
DiffSequence.diffQueryOrderedChanges/<@http://localhost:3000/packages/diff-sequence.js?f4337773c8aaf9bcaa5f5f22865660cbdd471eaa:201:1
_.forEach@http://localhost:3000/packages/underscore.js?46eaedbdeb6e71c82af1b16f51c7da4127d6f285:149:7
DiffSequence.diffQueryOrderedChanges@http://localhost:3000/packages/diff-sequence.js?f4337773c8aaf9bcaa5f5f22865660cbdd471eaa:193:3
diffArray@http://localhost:3000/packages/observe-sequence.js?cd318009bd759e1458173f84a537c5dd315b4f86:207:1
ObserveSequence.observe/computation</<@http://localhost:3000/packages/observe-sequence.js?cd318009bd759e1458173f84a537c5dd315b4f86:140:9
Tracker.nonreactive@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:615:12
ObserveSequence.observe/computation<@http://localhost:3000/packages/observe-sequence.js?cd318009bd759e1458173f84a537c5dd315b4f86:114:7
Tracker.Computation.prototype._compute@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:349:5
Tracker.Computation.prototype._recompute@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:368:9
Tracker._runFlush@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:507:9
onGlobalMessage@http://localhost:3000/packages/meteor.js?9730f4ff059088b3f7f14c0672d155218a1802d4:365:11
 friendList.js:29
Error: ReactiveDict.equals: value must be scalar
Traza de la pila:
.equals@http://localhost:3000/packages/reactive-dict.js?8210a4b2fa52dbde9b3c8cf6b296192a34d7b899:149:1
.selected@http://localhost:3000/app/client/ask/left/friendList.js?7383955f3a0a4e16805f78cf001a80239bc1ddc6:25:30
bindDataContext/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2986:14
Blaze._wrapCatchingExceptions/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1650:14
wrapHelper/</<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:3038:14
Template._withTemplateInstanceFunc@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:3671:12
wrapHelper/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:3037:1
Spacebars.call@http://localhost:3000/packages/spacebars.js?1aedcc2aa3ae9ff5d860d73516110cedd77c033e:167:12
Spacebars.mustacheImpl@http://localhost:3000/packages/spacebars.js?1aedcc2aa3ae9ff5d860d73516110cedd77c033e:104:10
Spacebars.mustache@http://localhost:3000/packages/spacebars.js?1aedcc2aa3ae9ff5d860d73516110cedd77c033e:108:16
Template.friendList</</<.class@http://localhost:3000/app/client/ask/left/template.friendList.js?8c20bf90b0e5df348201891218a57c7259d3c32e:12:38
Blaze._withCurrentView@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2211:12
.visitAttribute@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2139:1
.visitAttributes@http://localhost:3000/packages/htmljs.js?fd1566f5a5a4b277eb93f0a636a84a07ab9a83db:221:24
.visitAttributes@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2133:12
Blaze._expandAttributes@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2161:1
materializeTag/updateAttributes@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1517:27
viewAutorun/</<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1872:18
Template._withTemplateInstanceFunc@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:3671:12
viewAutorun/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1870:1
Blaze._withCurrentView@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2211:12
viewAutorun@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1869:1
Tracker.Computation.prototype._compute@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:349:5
Tracker.Computation@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:237:5
Tracker.autorun@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:588:11
Blaze.View.prototype.autorun@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1882:14
materializeTag@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1530:9
materializeDOMInner@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1445:24
Blaze._materializeDOM@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1415:3
Blaze._materializeDOM@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:1424:7
Blaze._materializeView/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2053:25
Tracker.nonreactive@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:615:12
Blaze._materializeView@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2017:3
Blaze.Each/</eachView.stopHandle<.addedAt/<@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2791:25
Tracker.nonreactive@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:615:12
Blaze.Each/</eachView.stopHandle<.addedAt@http://localhost:3000/packages/blaze.js?9391df93ba5076c2cfc61ee68724eb79b65f00d9:2764:9
diffArray/<.addedBefore@http://localhost:3000/packages/observe-sequence.js?cd318009bd759e1458173f84a537c5dd315b4f86:223:1
DiffSequence.diffQueryOrderedChanges/<@http://localhost:3000/packages/diff-sequence.js?f4337773c8aaf9bcaa5f5f22865660cbdd471eaa:201:1
_.forEach@http://localhost:3000/packages/underscore.js?46eaedbdeb6e71c82af1b16f51c7da4127d6f285:149:7
DiffSequence.diffQueryOrderedChanges@http://localhost:3000/packages/diff-sequence.js?f4337773c8aaf9bcaa5f5f22865660cbdd471eaa:193:3
diffArray@http://localhost:3000/packages/observe-sequence.js?cd318009bd759e1458173f84a537c5dd315b4f86:207:1
ObserveSequence.observe/computation</<@http://localhost:3000/packages/observe-sequence.js?cd318009bd759e1458173f84a537c5dd315b4f86:140:9
Tracker.nonreactive@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:615:12
ObserveSequence.observe/computation<@http://localhost:3000/packages/observe-sequence.js?cd318009bd759e1458173f84a537c5dd315b4f86:114:7
Tracker.Computation.prototype._compute@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:349:5
Tracker.Computation.prototype._recompute@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:368:9
Tracker._runFlush@http://localhost:3000/packages/tracker.js?7776276660c988c38fed448d8262b925dffb5bc3:507:9
onGlobalMessage@http://localhost:3000/packages/meteor.js?9730f4ff059088b3f7f14c0672d155218a1802d4:365:11
 friendList.js:29

我正在尝试创建一个简单的朋友列表,如果用户点击其中一个颜色更改。这应该非常简单。

Session变量保存在此处:

Session.setDefault('selectedFriend', null);
Template.friendList.events({
    'click .ableToSelect': function(evt){
        Session.set('selectedFriend', this);
    }
 });

编辑:Meteor.user()。profile.friends返回:Array [“juan”,“asd”]

EDIT2:

这是模板代码:

<template name="friendList">
    <button type="button" class="friends-switch-panel btn btn-primary">Add Friend</button>
    <div class="list-group">
    {{#each friends}}
        <button class="list-group-item {{selected}} ableToSelect">
            {{this}}
        </button>
    {{/each}}
    </div>
</template>

1 个答案:

答案 0 :(得分:3)

这里的核心问题与this question中的核心问题相同。使用字符串作为数据上下文(在这种情况下迭代用户名数组)会导致一些奇怪的极端情况,因为每个都将转换为String实例。需要最少更改次数的修复只是在您操纵toString变量的两种情况下调用Session

var isSelected = Session.equals('selectedFriend', this.toString());

Session.set('selectedFriend', this.toString());

这将为您提供一个字符串原语而不是String对象,Session可以轻松使用。

顺便说一句,我觉得有必要指出使用ID而不是用户名通常是一种更安全的选择 - _id永远不会改变,但如果用户名有效,你的关联就会破坏。

相关问题