0

メテオ初心者です。Todos の例に基づいて、別の Tags コレクションを使用しようとしています。奇妙な UI アーティファクトを除いては機能しているようです: タグ フィルターでタグをクリックし、todo リストの最後の項目をチェックすると、最初の項目もチェックされます。最初のアイテムが更新されず、タグ フィルターから離れてクリックして戻ると、最初のアイテムがチェックされていない状態で表示されます。だから、なぜそれが起こっているのか分かりません。

Todos のコードは Todos の例と同じです

    {{#each todos}}
      {{> todo_item}}
    {{/each}}

タグ コレクション フィルタのコード

    var todos = [];
    if (!currentTaskId)
      return {};

    var tag_filter = Session.get('tag_filter');
    if (tag_filter){
     var tags = Tags.find({taskId: currentTaskId, name: tag_filter});
     tags.forEach(function(tag){
       var todo = Todos.findOne(tag.todoId);
       todos.push(todo);
     });
     return todos; // this is an array rather than a collection and causes a strange artifact bug when checking bottom todo as done    
    }

私が収集できたのは、配列に対して {{#each}} を実行すると、配列内の個々の項目ではなくスコープ全体に依存関係が作成されるのに対し、コレクション カーソルは各ドキュメントの依存関係を自動的に作成するということです。コレクションで。この奇妙な UI 動作に遭遇した人はいますか? また、配列をカーソルにする方法があるかどうか、または配列内の各項目の依存関係を登録することで、少なくともカーソルのように動作する方法があるかどうかも知りたいですか?

洞察に感謝します、ありがとう。

4

1 に答える 1

1

配列ではなくカーソルを返すようにコードを修正しました。問題が解決する可能性がありますが、テストされていません。

var tagFilter=Session.get("tag_filter");
if(!currentTaskId || !tagFilter){
    return null;
}
// find tags and fetch them in an array
var tags=Tags.find({
    taskId:currentTaskId,
    name:tagFilter
}).fetch();
// build an array of Todos ids by extracting the todoId property from tags
// see underscore docs
var todosIds=_.pluck(tags,"todoId");
// return todos whose id is contained in the array
return Todos.find({
    _id:{
        $in:todosIds
    }
});
于 2013-09-13T00:44:46.287 に答える