【问题标题】:Blaze.renderWithData - how to automatically update template if data changes?Blaze.renderWithData - 如果数据更改,如何自动更新模板?
【发布时间】:2015-09-15 11:52:44
【问题描述】:

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

【问题讨论】:

    标签: meteor


    【解决方案1】:

    使用两个帮助器,一个返回光标的非反应式的,一个返回标题的反应式的。要使某些东西无反应,请使用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。您可以看到总分会随着您向玩家添加分数而更新,但玩家得分和排序永远不会改变。

    【讨论】:

    • @Michel Floyd 你是不是建议在使用 Blaze.renderWithData 时不能这样做?
    • 一点也不。例如,这些助手可以在嵌入动态模板的模板上。我想在这种情况下你不需要cursor 助手,你只需使用Tracker.nonreactive 来获取Blaze.renderWithData() 的数据上下文
    • @ Michel Floyd - 您介意在您提供的答案中添加和使用 Blaze.renderWithData() 的示例吗?
    猜你喜欢
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    相关资源
    最近更新 更多