通过当前路由器's模型转换为Ember.js中创建的对象

Passing current router's model into a created object in Ember.js

本文关键字:Ember 转换 js 对象 创建 模型 路由器      更新时间:2023-09-26

我正在构建一个对象,该对象处理一种定时方法,以控制用服务器中的数据刷新模型。它非常简单。然而,我必须在路由器内重新定义刷新对象,在那里我用当前模型实例化它。这违背了将其作为单独对象的意义。我打算在多个页面上使用它。

我从这样的对象开始:

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在安装时获得当前模型的路由器。我试过将它作为回调传递,但它根本不起作用。

任何想法都会有所帮助。

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

然后你可以订阅重新加载程序,并在该停止时取消订阅。这样你就可以避免在多个地方重新加载模型。

或者,我会将逻辑添加到一个mixin中,然后将该mixin添加到您的模型中,这样您就可以调用model.startReloading(2000)