我有一个Em.ArrayController
,里面有一堆记录。它们都由itemController
控制。
App.ColorsController = Em.ArrayController.extend({
itemController: 'color',
actions: {
discardChanges: function() {
this.get('content').forEach(function(color) { color.rollback(); }
// also tried an arrayComputed property like this:
// deletedRecords: Em.computed.filterBy('content', 'isDeleted', true);
}
}
});
如果我在其中一个模型上调用deleteRecord()
(来自itemController中的操作,则该模型将从model
的{{1}}中移除。
ArrayController
请记住App.ColorController = Em.ObjectController.extend({
actions: {
deleteColor: function() {
// does not send a `DELETE` request, only
// changes the state of the record
this.get('content').deleteRecord();
}
}
});
没有提交网络请求,它只是将对象的状态转换为deleteRecord
。
删除后,是否需要手动保留此对象的某种句柄?或者是否有一些方法让ArrayController访问此状态的项目。
我试图按deleted.uncommitted
过滤ArrayController的内容。
答案 0 :(得分:2)
您的阵列控制器正由过滤器支持。过滤器处于活动状态,因为它们会自动添加/删除记录,因为商店已添加/删除了活动记录。 (fyi,find('foo')
返回all
过滤器。
您可以将内容复制到非活动的集合/数组,这些集合/数组不会自动添加/删除模型(您必须手动完成所有操作)。最简单的地方是覆盖setupController
并在控制器上添加一个属性,可以在模板中访问该属性。
App.FooRoute = Em.Route.extend({
model: function(){
this.store.find('foo');
},
setupController: function(controller, model){
this._super(controller, model);
controller.set('staticFoos', model.toArray());
}
});