我正在使用流星0.6.4。我遇到的问题是渲染模板时的数据上下文有时是未定义的,所以'this'对象是对Window的引用:
Template.task.time_left = function(){
debugger;
var nDate = this.due_date.getTime();
Exception from Deps recompute: TypeError: Cannot call method 'getTime' of undefined
html代码包含在{{each}}句柄语句中:
<template name="tasks_lists">
{{#each tasks_list}}
...
{{#each task}}
{{> task}}
{{/each}}
...
{{/each}}
</template>
<template name="task">
...
<div class="text">{{due_date}}</div>
...
</template>
我读到这个错误已经在早期版本的Meteor中解决了。我该怎样做才能避免使用'this'作为Window来调用函数。
答案 0 :(得分:0)
您应该使用template.xxx.helpers,即:
Template.task.helpers({
nDate: function() {
return this.due_date.getTime();
}
});
在帮助程序中使用它时,这是数据上下文。
答案 1 :(得分:0)
我使用'助手'功能,我有同样的问题。 'this'对象有时是窗口对象:
Template.task.helpers({
...
'time_left': function(){
debugger;
var nDate = this.due_date.getTime();
...
答案 2 :(得分:-1)
模板助手中的this
始终指向window
对象。
您可以访问data
中的Template.rendered()
上下文或事件处理函数。在事件处理程序中,它作为第二个参数传递为function( event, template )
,其中template
是当前模板对象。
但是我建议您使用模板实例函数,例如find(), findAll(), firstNode(), lastNode()
而不是数据上下文。
Template.task.rendered = function() {
if( !this.window ){ //check that 'this' is not a 'window' object
var el = this.find( 'div.text' ); // the div that holds due_date
//do something
}
}