路径中的属性在控制器中未定义

时间:2014-12-18 16:32:22

标签: ember.js

在我的Ember hello world应用程序的IndexRoute中,我启动了一个setInterval函数,我希望通过单击模板中的dom元素来允许最终用户关闭(使用clearInterval),它会在IndexController中触发一个动作。所以,setIntervalId在IndexRoute中设置,我需要将它传递给IndexController中的clearInterval,但是我在下面的方式,setIntervalIdundefined 。我也尝试使用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> 

1 个答案:

答案 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'));
  }
}