我正在研究如何关闭模板帮助函数中的反应性。我只希望在最初填充模板时呈现数据,而不是在基础数据发生变化时呈现。
我当前的助手有两个反应变量:一个是Session.get(),另一个是 Collection .findOne()。我已经尝试将Session.get()包装在Tracker.nonreactive()调用中,并在 Collection .findOne()上将reactive选项设置为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;
}
}
});
我现在一直在努力解决这个问题大约半天。任何帮助将不胜感激。
答案 0 :(得分:0)
您为保留的助手使用名称data
。因此,如果您有另一个帮助器或铁路由器路由,其中包含data
,或者此模板是另一个模板的子模板,它也可能重绘。
尝试将其重命名为其他内容。
答案 1 :(得分:0)
您可以在渲染模板时使用闭包来查找和设置记录,然后在模板助手中返回一个静态对象:
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;
}
}();
虽然这甚至感觉太多了。当然有一种更简单的方法。