在我的Ember hello world应用程序的IndexRoute中,我启动了一个setInterval
函数,我希望通过单击模板中的dom元素来允许最终用户关闭(使用clearInterval
),它会在IndexController中触发一个动作。所以,setIntervalId
在IndexRoute中设置,我需要将它传递给IndexController中的clearInterval
,但是我在下面的方式,setIntervalId
是undefined
。我也尝试使用App.IndexRoute.setIntervalId
无济于事。
我怎么做到这一点?
(function() {
window.App = Ember.Application.create({
LOG_TRANSITIONS: true,
LOG_ACTIVE_GENERATION: true
});
App.IndexRoute = Ember.Route.extend({
setIntervalId: 0,
model: function() {
this.setIntervalId = setInterval(this.someInterval, 5000)
},
someInterval: function(){
var datasource = 'http://hackernews/blahblah';
return new Ember.$.ajax({url: datasource, dataType: "json", type: 'GET'}).then(function(data){
return data;
})
},
});
App.IndexController = Ember.ObjectController.extend({
actions: {
clearTimeout: function(){
console.log('clearing interval', this.setIntervalId); //undefined
clearInterval(this.setIntervalId);
}
}
})
})();
模板
<script type="text/x-handlebars" data-template-name="index">>
<h1>Hi Babe</hi>
{{ outlet }}
<label {{action "clearTimeout" on="click"}}>clear timeout</label>
</script>
答案 0 :(得分:0)
要设置模型,您需要返回路径model
函数中的值:
model: function() {
return this.setIntervalId = setInterval(this.someInterval, 5000)
}
要访问控制器中的模型,您需要使用this.get('model')
。
actions: {
clearTimeout: function(){
console.log('clearing interval', this.get('model');
clearInterval(this.get('model'));
}
}