Ember.js ArrayController在删除记录时未更新
使用ember data 1.0.0-beta.5,并具有以下路由和路由器Ember.js ArrayController在删除记录时未更新,ember.js,ember-data,Ember.js,Ember Data,使用ember data 1.0.0-beta.5,并具有以下路由和路由器 App.Router.map(function () { this.resource('users', function () { this.route('new'); }); this.resource('user', { path: '/user/:id' }, function () { this.route('edit');
App.Router.map(function () {
this.resource('users', function () {
this.route('new');
});
this.resource('user', { path: '/user/:id' }, function () {
this.route('edit');
});
});
App.UsersIndexRoute = Ember.Route.extend({
model: function(){
return this.store.findAll('user');
},
setupController: function (controller, data) {
this._super(controller, data);
}
});
App.UserEditRoute = Ember.Route.extend({
model: function() {
return this.store.find('user', this.modelFor("user").id);
},
setupController: function (controller, data) {
this._super(controller, data);
},
actions: {
delete: function(){
var router = this;
var model = this.currentModel;
model.destroyRecord().then(function(){
router.transitionTo('users');
});
}
}
});
但是,当我转换回用户路由时,ArrayController中仍然包含已删除的对象。关于为什么会这样,或者如何等到它被删除后再转换,您有什么想法吗?在您的情况下,因为您想重新访问所有用户,而您的服务器在删除记录方面对您撒谎(或者稍后会发生),您可能会考虑先转换然后删除
delete: function(){
var model = this.currentModel;
this.transitionTo('users').then(function(){
model.destroyRecord();
});
}
这是一种解决方法,但解决了问题 在UsersIndexController中,添加一个数组来存储删除的ID
App.UsersIndexController = Ember.ArrayController.extend({
deleted: []
});
然后只需将已删除模型的id附加到此数组,并在setupController方法中进行筛选
App.UsersEditRoute = Ember.Route.extend({
delete: function(){
var router = this;
var model = this.currentModel;
var usersController = this.controllerFor('users.index');
model.destroyRecord().then(function(){
usersController.get('deleted').push(model.id);
router.transitionTo('users');
});
}
}
});
App.UsersIndexRoute = Ember.Route.extend({
setupController: function (controller, data) {
var deleted = this.controller.get('deleted');
var filtered = data.filter(function(user){
return !deleted.contains(user.id);
});
data.set('content', filtered);
this._super(controller, data);
}
});
它真的被从服务器上删除了吗?是的。但是,我有一个返回用户对象的弹性索引。我能想到的唯一一件事是,它从索引中删除并在/users调用中返回时会有一个延迟。我也曾怀疑过,当您再次点击路由时,您希望捕获新用户,还是这不重要?我想捕获任何新用户。但我认为我的实现可以处理这个问题吗?是的,可以,我只是想知道这是否是你的意图(重新访问所有用户)。这仍然不能解决问题,因为/users调用将返回已删除的对象,但它仍然不会被删除,你将转换到用户,它将获取新用户,然后删除该用户,然后它将从列表中删除。在我的情况下,这仍然不能解决问题。请参阅下面我的解决方案。