Blaze.renderWithData - 如果数据发生变化,如何自动更新模板?

时间:2015-09-12 23:34:08

标签: meteor

我使用Meteor建立了一个列表。我不希望整个列表被激活,即数据更改时自动更新。但是,如果与该列表项相关的数据发生更改,我确实希望更新列表项的标题。我正在使用Blaze.renderWithData插入列表项,那么我该如何实现呢?

1 个答案:

答案 0 :(得分:0)

使用两个助手,一个返回光标的非反应性助手和一个返回标题的被动助手。要制作非反应性内容,请使用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。您可以看到,当您向玩家添加积分时,总积分会更新,但玩家得分和排序永远不会改变。