ember data reload()undefined

时间:2014-04-28 03:58:31

标签: ember.js ember-data

我正在尝试重新加载服务器上已更改的模型。我的代码如下:

App.CustomersController = Ember.ArrayController.extend({
  intervalId: undefined,
  startRefreshing: function() {
    var self = this;
    if ( self.get( 'intervalId' ) ) {
        return;
    }

    self.set( 'intervalId', setInterval( function() {
        //self.get('model').update();
        self.get('model').reload();
    }, 30000 ) );
  }
});

App.CustomersRoute = Ember.Route.extend({
  model: function() {
    return this.store.find('customer');
  },
  setupController: function( controller, model ){
    this._super( controller, model );
    controller.startRefreshing();
  },

  actions: {
    reload: function() {
        this.get('model' ).reload();
    }
  }
});

您可以看到我有两种重新加载数据的机制 - 一种是计时器,也是一种由UI中的按钮触发的操作。后者正是这里的ember-data文档中显示的内容:http://emberjs.com/api/data/classes/DS.Model.html#method_reload

两者都不起作用。我在两种情况下都未定义,即返回的模型没有reload()方法。 update()类型的工作,除了它不删除已删除的记录,它不是文档中建议的。在尝试使用重载时我在做错了什么?

我的筹码:

DEBUG: -------------------------------
DEBUG: Ember      : 1.5.1+pre.07fafb84
DEBUG: Ember Data : 1.0.0-beta.7.f87cba88 
DEBUG: Handlebars : 1.3.0 
DEBUG: jQuery     : 1.11.0 
DEBUG: ------------------------------- 

我正在使用以下适配器以防有任何不同:

App.Store = DS.Store.extend({
  // Override the default adapter with the `DS.ActiveModelAdapter` which
  // is built to work nicely with the ActiveModel::Serializers gem.
    adapter: '-active-model'
});

1 个答案:

答案 0 :(得分:1)

reload存在于记录中,而不是集合。

您需要迭代集合并在每条记录上调用reload。

self.get('model').forEach(function(record){
  record.reload();
});

但我猜你不想把回调浪费在服务器上。在这种情况下,我建议将过滤器作为模型返回,然后再次向服务器调用所有记录。

App.CustomersRoute = Ember.Route.extend({
  model: function() {
    this.store.find('customer');
    return this.store.all('customer');
  },
  setupController: function( controller, model ){
    this._super( controller, model );
    controller.startRefreshing();
  },

  actions: {
    reload: function() {
        this.get('model' ).reload();
    }
  }
});

App.CustomersController = Ember.ArrayController.extend({
  intervalId: undefined,
  startRefreshing: function() {
    var self = this;
    if ( self.get( 'intervalId' ) ) {
        return;
    }

    self.set( 'intervalId', setInterval( function() {
        self.store.find('customer');  // get all customers again, updating the ones we have
    }, 30000 ) );
  }
});