我正在构建一个对象,该对象处理定时方法以控制使用来自服务器的数据刷新模型。这非常简单。但是,我是Ember的新手,难以理解范围和背景。在Ember.js中的方法之间共享变量上下文
举例来说,当我创建一个对象,例如:
App.ModelRefresh = Ember.Object.extend({
start: function(){
this.timer = setInterval(this.refresh.bind(this), 2000);
},
stop: function(){
console.log('stop');
clearInterval(this.timer);
},
refresh: function(){
console.log('refresh');
}
});
然后在路由器中创建它来处理重装。再次如此:
App.PublishablesRoute = Ember.Route.extend({
model: function() {
return App.Publishable.fetch();
},
setupController: function(controller, model) {
controller.set('model', model);
var modelRefresh = App.ModelRefresh.create();
modelRefresh.start();
},
deactivate: function() {
modelRefresh.stop();
}
});
在控制台中,我看到错误。
Assertion failed: Error while loading route: ReferenceError: modelRefresh is not defined
我可以得到它没有麻烦(显然)运行的方法.start()
。但我可以运行.stop()
。这是有道理的,但如何在不同的路由方法之间共享新创建的modelRefresh。在Backbone.js中,我会添加它来初始化并使用this
引用父项。在Ember中,这似乎不起作用。
任何帮助,将不胜感激。
这是绝对奏效。我注意到,如果我将'modelRefresh.start()'移动到''''激活''我得到相同的断言失败错误。有什么我应该知道的激活会导致这种情况发生? –
你能告诉我吗? – Kingpin2k
n/m激活发生在setupController之前,所以它可能还没有被创建。 :) – Kingpin2k