Template.prices.rendered = function() {
OrderFormContent = new Meteor.Collection(null);
var orderSubmission = function() {
//code that inserts stuff into the OrderFormContent collection
//the key **sqft** is assigned the value of **4000** };
orderSubmission();
};
Template.prices.helpers({
sqft: function() {
return OrderFormContent.findOne().sqft;
}
});
上面的代码无法加载。 Meteor尝试创建{{sqft}}的帮助程序但不能,因为在页面呈现之后才会定义OrderFormContent。看来Meteor试图在页面呈现之前定义帮助器。
但我需要定义这个助手。我需要在渲染模板(未创建)之后定义它。
我不能在Template.prices.helpers
内嵌套Template.prices.rendered
。
澄清:
如果我注释掉Template.prices.helpers
代码,页面就会加载。如果我然后在控制台中手动运行OrderFormContent.findOne().sqft
,则返回值4000。
当我取消评论Template.prices.helpers
代码时,页面无法加载,我收到Exception from Deps recompute function: ReferenceError: OrderFormContent is not defined
错误。
答案 0 :(得分:1)
1)在函数内部定义全局变量是违反Javascript的良好实践,在严格模式下无效(因此将来当严格模式成为标准时将无效)。
2)您可以轻松实现目标,而无需在渲染后定义帮助程序。实际上,当帮助者创建但是当被调用时,不会抛出错误。要解决这个问题,只需要进行简单的检查即可。
var OrderFormContent = null;
var orderFormContentDep = new Deps.Dependency();
Template.prices.rendered = function() {
OrderFormContent = new Meteor.Collection(null);
...
orderFormContentDep.changed();
};
Template.prices.helpers({
sqft: function() {
orderFormContentDep.depend();
if(!OrderFormContent) return null;
var item = OrderFormContent.findOne();
if(!item) return null;
return item.sqft;
});
});
答案 1 :(得分:0)
当我收到错误时,我将模板帮助器移动到客户端js,它就消失了。只有那些不适用于我的目的,因为它执行得太频繁了。所以,我把它放到一个铁路由器路由方法中进行渲染。