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.
我想在助手中使用我的 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.