Ember + Ember数据:调用deleteRecord()后如何回滚记录

时间:2014-06-16 01:58:25

标签: ember.js ember-data

我有一个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的内容。

1 个答案:

答案 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());
  }
});