我试图了解在一组不同的集合和路由中定义全局集合对象的最佳方法。基本上我想要一个与集合中特定条目相关的变量。
foo = Collection.findOne({name:"foo"});
因此foo
是一个全局对象。不幸的是,foo在帮助器中使用时不具有反应性,即
Template.show.helpers({
value : function () {
return foo;
}
返回undefined
,但是如果在控制台中查询Collection
,则表明实际上存在name:"foo
对象的值。这是因为在对Collection的订阅完成之前设置了foo
。
我也可以在帮助器中分配值,但这种方式看起来很脏而且不正确:
foo = null;
Template.show.helpers({
setFoo : function () {
foo = Collection.findOne({name:"foo"});
}
最后我尝试使用Iron:Router等待订阅,但我仍然遇到同样的问题。如果Cordova应用程序处于脱机状态,那么使用铁路由器等待会产生另一个问题,由于订阅等待,路由将永远不会呈现。我还尝试使用data
上下文设置vaiable,但它也有与以前相同的问题。
最终我的问题是如何声明一个不依赖于路由或等待订阅的全局响应变量。 `ReactiveVar是一个选项,如果是这样,我将如何在这种情况下使用它? 感谢。