以下是经过修改的排行榜:
http://meteorpad.com/pad/CgEG3uYBZDceTERXA/Leaderboard
我为players
光标添加了限制,并显示scorePlusOne
而不是score
。
Template.leaderboard.helpers({
players: function () {
return Players.find({}, { sort: { score: -1, name: 1 } , limit: Session.get('limit')});
Template.player.helpers({
scorePlusOne: function() {
console.log('scorePlusOne',this.name);
return this.score + 1;
当我将限制从1增加到2时,第一个播放器模板不会被重新渲染,但重新运行scorePlusOne
帮助器。
我不希望任何已呈现模板的帮助程序重新运行,除非它们包含更改的被动数据。有没有办法实现这种行为?
答案 0 :(得分:1)
我不认为你可以避免在更新被动数据时运行帮助程序。
然而,一种溢出这种方法的方法可能是使用tracker.autorun()
函数将标志包装为true并允许帮助程序运行或不运行。由于反应元素,模板重新渲染后,它将切换为true。
看起来像这样:
Template.leaderboard.rendered = function() {
this.autorun(function(){
flag = true
});
};
你的助手看起来像这样:
Template.leaderboard.helpers({
players: function () {
if (flag===true){
return Players.find({}, { sort: { score: -1, name: 1 } , limit:
Session.get('limit')});
}
},
selectedName: function () {
if (flag===true){
var player = Players.findOne(Session.get("selectedPlayer"));
return player && player.name;
}
}
});
每次进行更改时,只需设置flag = false
即可。
答案 1 :(得分:0)
缓存模板帮助程序导致ReactiveVar
s并将帮助程序代码移动到模板autoruns:
https://github.com/meteor/meteor/issues/4960#issuecomment-132715347