meteor 中 helpers 反应性最简洁优雅的破解方式

The most concise and elegant way to break the reactivity of helpers in meteor

我想在助手中使用我的 collection 玩家...出于多种原因,我希望这个 collection 不会有反应。我只想第一次调用数据库以显示 collection。我尝试使用 reactivates:false 选项,但在这种情况下,collection 在加载后仍然为空,没有任何显示。

 Template.myGame.helpers({
      players: function () {
        return Players.find({}, {reactive: false});
      }
    })


<ul>
  {{#each players}}
    {{> player}}
  {{/each}}
</ul>

您正在有效地寻找一种 return 非反应性数据的方法,但只有在它准备好之后。这可以通过订阅句柄来实现(假设您已删除 "autopublish")。

playersSub = Meteor.subscribe('players', ...);

Template.myGame.helpers({
  players: function() {
    if (playersSub.ready()) {
      return Players.find({}, {reactive: false});
    } else {
      return [];
    }
  }
});

注意 - 实际上可以在没有句柄的情况下(非反应性地)通过使用 Players._connection._subscriptions.[SUB_ID].ready 来准备好订阅,但我不推荐这样做,因为它不是 [=18] 的一部分=] API.