2017-02-01 8 views
0

はそう、これは...MeteorJS - リスト項目パブリッシュ/サブスクライブおよび方法/

少し奇妙で[OK]を呼び出して、私は、サーバー側でこれらのメソッドを持って実施した後、更新されない...

Meteor.publish('todos', function() { 
return Todos.find({userId: this.userId},{sort:{createdAt:-1}}); 
}); 

Meteor.methods({ 
    editTodo: function(todoId) { 
     Todos.update(todoId, {$set: {checked: !this.checked}}); 
    } 
}); 

そして、ここでは、クライアント側の呼び出し....

Template.list.helpers({ 
    todos: function(){ 
     Meteor.subscribe('todos'); 
     return Todos.find({}); 
    } 
}); 
Template.list.events({ 
    "click .toggle-check": function(){ 
     Meteor.call('editTodo',this._id); 
    }}); 

問題があるが、そのときにクリックして「.toggleチェック」が発生... 『にチェック』ブールは、上のトリガが、外れされることはありません。.. ..これはチェックされている(in {checked:!this.checked})は、コレクションからすぐに読み取られたフィールドを参照していませんか? データを購読するときに間違った実装をしていますか?

助けてください!

+1

あなたの方法では、 "this.checked"は正しいものに解決されますか?それは奇妙に見える。 – zim

+0

私はチェックボックスにチェック状態をレンダリングしているので、ビュー上でレンダリングされています。これから欠けているのは、私がここで完全なCRUDをSELECT、INSERT、DELETEのうまく動作させていることです。正常に動作しないようです。 私は、更新ボタンを押すと、(サーバー側から)コンソールの行を取得して表示したことを確認しました。チェックは常にtrueに設定されていますが、falseになることはありません。だから、this.checkedは本質的に動作していません。また許可/拒否もありません! – Metrophobe

+0

はい、私は、「これはおそらくあなたがその文脈で考えるものではない」と言っています。少なくとも、私はそれがそのように使用されたことを見たことがない。私は "this"の使用をデバッグすることに進みます。 – zim

答えて

1

あなたが提案したように、サブスクリプションの登録に関係していると思います。具体的にはがTemplate.helpersの機能の中から呼び出されています。

サブスクリプションをTemplate.body.onCreated()またはTemplate.list.onCreated()などの以前のページまたはテンプレートイベントに移動してみてください(要件に応じて)。

メテオのドキュメントには、https://www.meteor.com/tutorials/blaze/publish-and-subscribe(10.3節参照)という良い例があります。

+0

今私はPCの前にいませんが、あなたの提案に行き、投稿してください。レイテンシーのためだと思いますか? Meteor.startup()にすべてのサブスクリプションを再配置すると、問題が解決すると思いますか? – Metrophobe

+0

私はそれが正しいと信じています:)最後に、 'Meteor.subscribe()'呼び出しを '\ imports \ startup \の' Template.body.onRendered(function(){}) ' client \ index.js'であり、すべてが非常にスムーズに動作します。 – David

+0

が登録されている必要があります(私はonCreated()に移動します)、私はそれが問題だとは思わない。そのヘルパーでは、find()はまだ反応するはずです。 Blazeがそのヘルパーに電話することを決定するたびに購読する必要はありません。一度十分です。 – zim

関連する問題