我正在尝试重新加载服务器上已更改的模型。我的代码如下:
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'
});
答案 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 ) );
}
});