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" }

私が間違っていることは何か分かりますか?(実際には、「Meteor 入門」の書籍貸出ライブラリの例に従っています

編集次のようです:

console.log(this.userId);
undefined
4

3 に答える 3

1

thisおそらく、そのイベント内にあると期待するものではありません。それが事実であることを確認するためにデバッグする必要があります。あなたはおそらく undefined for になっているだけですthis.userIdthisこのイベント ハンドラー関数の外側で変数 (「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.UserIdMeteor.template()Meteor.userId()

于 2015-01-18T11:17:38.307 に答える