我的客户端文件中有以下事件:
Template.categories.events({
...
'keyup #add-category': function (e,t){
if (e.which === 13)
{
var catVal = String(e.target.value || "");
if (catVal)
{
lists.insert({Category:catVal,owner:this.userId});
Session.set('adding_category', false);
}
}
},
...
});
这是相关的模板部分:
<template name="categories">
<div id="categories" class="btn-group">
{{#if new_cat}}
<div class="category">
<input type="text" id="add-category" value="" />
</div>
{{else}}
<div class="category btn btn-inverse" id="btnNewCat">+</div>
{{/if}}
{{#each lists}}
<div class="category btn {{list_status}}" id="{{_id}}">
{{Category}}
</div>
{{/each}}
</div>
</template>
因此,当插入新的类别时,应该设置所有者..但它不会。
这是MongoDB中的条目:
> db.lists.find()
{ "Category" : "test-admin", "_id" : "EsybjC3SLnNzCBx2t" }
知道我做错了什么吗? (实际上我正在关注“流星入门”图书借阅图书馆的例子
编辑似乎:
console.log(this.userId);
undefined
答案 0 :(得分:1)
this
可能不是您希望它在该事件中的内容。您应该调试以确认是这种情况。您可能只是this.userId
未定义。我建议将this
分配给此事件处理函数之外的变量(称为“self”或“that”),但在this
将成为您实际想要的范围内。然后,您可以在事件处理程序中引用该变量。
它应该是这样的:
function thatRegistersEvents() {
var self = this;
// ...
registerSomeEvent(function () {
return self.someThisProperty;
});
}
答案 1 :(得分:1)
交换此行:
lists.insert({Category:catVal,owner:this.userId});
到这一个:
lists.insert({Category:catVal,owner:Meteor.userId()});
答案 2 :(得分:0)
这是正确的行为。如果您阅读官方Meteor文档以获取对this.UserId
的引用,则仅在Meteor.publish()
和Meteor.methods()
中提供。您在上面的代码示例中完成的this.UserId
中未提供Meteor.template()
,因此必须在模板中使用Meteor.userId()
。