将当前路由器的模型传递到Ember.js中的已创建对象

时间:2013-12-13 21:40:00

标签: javascript ember.js

我正在构建一个对象来处理一个计时方法,以控制使用服务器中的数据刷新模型。这非常简单。但是,我必须重新定义路由器中的刷新对象,我将使用当前模型对其进行实例化。这使得它成为一个单独的对象失败了。我的目的是在多个页面上使用它。

我从这个对象开始:

App.ModelRefresh = Ember.Object.extend({
  init: function(callback) {
    this.timer = setInterval(this.refresh.bind(this), App.POLL_INTERVAL);
    this._super();
  },
  stop: function(){
    console.log('stop');
    clearInterval(this.timer);
  },
  refresh: function(){
    console.log('refreshing');
  }
});

然后在路由器中创建它以处理重新加载。再如此:

App.PublishablesRoute = Ember.Route.extend({
  model: function() {
    return App.Publishable.fetch();
  },
  setupController: function(controller, model) {
    controller.set('model', model);

    var modelRefresh = App.ModelRefresh.create('something');
    this.set('modelRefresh', modelRefresh );

    modelRefresh.refresh = function() {
      model.reload();
    };
  },
  deactivate: function() {
    this.get('modelRefresh').stop();
  }
});

我想要做的不是修改modelRefresh,而是添加当前的model.reload(),而是让Object在实例化时获取当前模型的路由器。我已经尝试将其作为回调传递,但它根本不起作用。

任何想法都会有所帮助。

1 个答案:

答案 0 :(得分:1)

我可能会建立某种调度程序,其目的是处理重新加载,调度等。

然后您可以订阅重新加载器并在需要停止时取消订阅。然后,您可以避免在多个位置重新加载模型。

或者我将逻辑添加到mixin然后将mixin添加到您的模型中,以便您可以调用model.startReloading(2000)