【发布时间】:2015-09-15 11:52:44
【问题描述】:
我使用 Meteor 建立了一个列表。我不希望整个列表都是被动的,即在数据更改时自动更新。但是,如果与该列表项相关的数据发生更改,我确实希望更新列表项的标题。我正在使用Blaze.renderWithData 插入列表项,那么我该如何实现呢?
【问题讨论】:
标签: meteor
我使用 Meteor 建立了一个列表。我不希望整个列表都是被动的,即在数据更改时自动更新。但是,如果与该列表项相关的数据发生更改,我确实希望更新列表项的标题。我正在使用Blaze.renderWithData 插入列表项,那么我该如何实现呢?
【问题讨论】:
标签: meteor
使用两个帮助器,一个返回光标的非反应式的,一个返回标题的反应式的。要使某些东西无反应,请使用Tracker.nonreactive、(related question)。
在以下人为设计的示例中,我将返回一个响应式标题,其中包含光标计数(如果非零),而从帮助程序返回的光标是非响应式的。
subHandle = Meteor.subscribe('mySubscription');
Template.foo.helpers({
cursor: function(){
if ( subHandle.ready() ) return Tracker.nonreactive(function() {
return myCollection.find(query,options);
});
}),
title: function(){
var nDocs = myCollection.find(query,options).count();
if ( nDocs ) return "Title (" + nDocs + ")";
else return "Title";
}
});
更新: 修改为处理准备好的订阅句柄,以便第一次使用准备好的订阅调用非反应函数。
Here's a Meteorpad with a working example。您可以看到总分会随着您向玩家添加分数而更新,但玩家得分和排序永远不会改变。
【讨论】:
cursor 助手,你只需使用Tracker.nonreactive 来获取Blaze.renderWithData() 的数据上下文