从函数内创建时 DOJO 中的变量范围
Scope of variable in DOJO when created from within function
在 DOJO 小部件中,postCreate 和 destroy 方法中的代码用于 create/start 并停止计时器,如下所示。根据下拉框中的值启动或停止计时器。到目前为止效果很好。
postCreate: function() {
var deferred = this.own(<...some action...>)[0];
deferred.then(
lang.hitch(this, function(result) {
this.t = new dojox.timing.Timer(result.autoRefreshInterval * 1000);
this.t.onTick = lang.hitch(this, function() {
console.info("get new data");
});
this.t.onStart = function() {
console.info("starting timer");
};
this.t.onStop = function() {
console.info("timer stopped");
};
})
);
this.selectAutoRefresh.on("change", lang.hitch(this, function(value) {
if (value == "Automatic") {
this.t.start();
} else {
this.t.stop();
}
}));
},
离开页面时,计时器仍然处于活动状态,所以我想在离开页面时使用 DOJO 的 destroy() 方法停止它。
destroy: function() {
this.t.stop();
},
然而,这会引发 this.t.stop is not a function
异常。虽然我使用 lang.hitch(this...
,但似乎 this.t
不是在小部件的上下文中创建的
我在这里错过了什么?
我通过将变量 t
重命名为 refreshTimer
解决了这个问题。也许 t
是 Dojo 中的某种保留变量?
在 DOJO 小部件中,postCreate 和 destroy 方法中的代码用于 create/start 并停止计时器,如下所示。根据下拉框中的值启动或停止计时器。到目前为止效果很好。
postCreate: function() {
var deferred = this.own(<...some action...>)[0];
deferred.then(
lang.hitch(this, function(result) {
this.t = new dojox.timing.Timer(result.autoRefreshInterval * 1000);
this.t.onTick = lang.hitch(this, function() {
console.info("get new data");
});
this.t.onStart = function() {
console.info("starting timer");
};
this.t.onStop = function() {
console.info("timer stopped");
};
})
);
this.selectAutoRefresh.on("change", lang.hitch(this, function(value) {
if (value == "Automatic") {
this.t.start();
} else {
this.t.stop();
}
}));
},
离开页面时,计时器仍然处于活动状态,所以我想在离开页面时使用 DOJO 的 destroy() 方法停止它。
destroy: function() {
this.t.stop();
},
然而,这会引发 this.t.stop is not a function
异常。虽然我使用 lang.hitch(this...
this.t
不是在小部件的上下文中创建的
我在这里错过了什么?
我通过将变量 t
重命名为 refreshTimer
解决了这个问题。也许 t
是 Dojo 中的某种保留变量?