据说使用太多的Sessions
是不好的,因为它“污染了全局名称空间”。现在,我不完全清楚这意味着什么(我可以轻松想到要使用的更多名称...),但是我已经开始使用ReactiveVar
了,但它似乎很复杂且有错误,因此我想知道这样做的好处是什么是。
例如,这个简单的用例抛出一个错误:
Template.AddingItem.onRendered(function() {
this.addingItem = new ReactiveVar(false)
})
Template.AddingItem.events({
'click .add-new-item.button': function(event, template) {
var addingItem = template.addingItem.get()
if (addingItem === false) {
template.addingItem.set(true)
}
else {
template.addingItem.set(false)
}
}
})
Template.AddingItem.helpers({
isAddingItem: function() {
return Template.instance().addingItem.get()
},
})
模板:
{{#if isAddingItem}}
<div>Showing something</div>
{{/if}}
有时,帮助程序会在
onRendered
之前运行,并且无法返回任何内容,因此该页面会出错。从字面上看,这是ReactiveVar
最简单的用例,它甚至不能做到这一点?我想念什么? 最佳答案
使用Template.onCreated
创建reactiveVars
。
您必须在运行任何控制器代码之前实例化reactVar,以便Tracker可以正确跟踪您的reactiveVar
。正如您所遇到的那样,onRendered
最适合用于操作DOM且运行太晚以至于无法可靠地确保在帮助程序运行时addingItem
存在的功能。
这就是onCreated
的最佳选择。这样,当您的助手/控制器代码运行时,确保您的reactVar存在。
Template.AddingItem.onCreated(function() {
this.addingItem = new ReactiveVar(false)
})
为了将来参考,
Sessions
实际上只是具有全局作用域的reactiveVars
……它们没有什么神奇之处。一直到reactiveVars
。关于javascript - 如何保持reactVars模板的作用域?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34519364/