1

我的客户文件中有以下事件:

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">&plus;</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" }

知道我做错了什么吗?(其实我是在关注“Getting Started with Meteor”图书借阅图书馆的例子

编辑似乎:

console.log(this.userId);
undefined
4

3 回答 3

1

this可能不是您期望它在该事件中的样子。您应该调试以确认是这种情况。你可能只是变得 undefined for this.userId。我建议在这个事件处理函数之外但在你真正想要this的范围内分配一个变量(称之为“self”或“that”) 。this然后,您可以在事件处理程序中引用该变量。

它应该如下所示:

function thatRegistersEvents() {
    var self = this;

    // ...

    registerSomeEvent(function () {
        return self.someThisProperty;
    });
}
于 2013-03-03T14:44:21.710 回答
1

交换这一行:

lists.insert({Category:catVal,owner:this.userId});

对此:

lists.insert({Category:catVal,owner:Meteor.userId()});
于 2013-03-03T15:00:29.227 回答
0

这是正确的行为。如果您阅读官方 Meteor 文档以获取对 的引用this.UserId,则它仅在Meteor.publish()和中可用Meteor.methods()this.UserId在 中不可用Meteor.template(),您在上面的代码示例中已完成,因此必须Meteor.userId()在模板中使用。

于 2015-01-18T11:17:38.307 回答