【问题标题】:Keep reactive helper from updating a meteor template阻止响应式助手更新流星模板
【发布时间】:2015-08-13 01:39:09
【问题描述】:

我正在研究如何在模板辅助函数中关闭反应性。我只希望在最初填充模板时而不是在底层数据更改时呈现数据。

我当前的助手有两个反应变量:一个是 Session.get(),另一个是 Collection.findOne()。我尝试将 Session.get() 包装在 Tracker.nonreactive() 调用中,并将 Collection.findOne() 上的反应选项设置为 false,但我仍然看到反应行为.

Template.characterSkills.helpers({
  data : function () {
    var characterID = Tracker.nonreactive(function () {
      return Session.get("currentCharacterID");
    });

    if(characterID) {
      var record = Characters.findOne(
        { _id : characterID },
        { 
          reactive : false,
          fields : { skills : 1 } 
        }
      );

      if(record && record.skills)
        return record.skills;
    }
  }
});

我已经尝试解决这个问题大约半天了。任何帮助将不胜感激。

【问题讨论】:

    标签: meteor


    【解决方案1】:

    您使用名称data 作为保留的助手。因此,如果您有另一个助手或包含data 的铁路由路由,或者此模板是另一个模板的子模板,它也可能重绘。

    尝试将其重命名为其他名称。

    【讨论】:

      【解决方案2】:

      您可以在模板渲染时使用闭包查找并设置记录,然后在模板助手中返回一个静态对象:

      Template.characterSkills.helpers({
        dataItem: function(){
          return record.get();
        }
      });
      
      Template.characterSkills.onCreated(function(){
        record.set(Session.get("currentCharacterID"));
      });
      
      var record = function(){
        var local = {};
        return {
          set: function(characterId){
            if ( characterID) local = Characters.findOne({_id: characterID},{fields : { skills : 1 }});
            else local = null;
          },
          get: function(){
            return local;
          }
       }();
      

      尽管这感觉工作量太大了。肯定有更简单的方法。

      【讨论】:

      • 我同意。这不是我正在寻找的“流星方式”答案。您会认为关闭反应性会更容易。
      • 谢谢,但还是没有骰子。 Meteor 封装 js 文件的方式似乎干扰了闭包。它根本不喜欢它......我已经尝试了几种不同的方法。我想我将绕过帮助程序并在 onRendered 回调中直接使用 jQuery 填充表格。
      • 我在示例应用程序中运行了类似的设置。关闭工作正常,但我应该在 onCreated 处理程序中调用 record.set() 而不是 onRendered 处理程序。它最终以非反应性方式工作。
      猜你喜欢
      • 1970-01-01
      • 2015-07-12
      • 2015-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多