如何在ember中访问已删除的记录?

时间:2014-02-04 20:58:24

标签: ember.js ember-data

假设我有一个任务申请。

当用户更新任务时,启用更新按钮并显示更新记录的数量。删除记录时,我无法实现此目的。

对于更新,可以在控制器中轻松完成:

App.TasksController = Ember.ArrayController.extend({
    changedAmount: function(){
        @filterBy('isDirty', true).get('length');
    }.property('content.@each.isDirty');
})

但是当我使用deleteRecord函数删除记录时,我无法获得更改/删除记录的数量。例如:

App.TasksRoute = Ember.Route.extend({
.
.
    actions: {
        delete: function(task){
            task.deleteRecord()
        }
    }
});

如何访问已删除的记录或至少其中的数量?

我的环境:

Ember      : 1.3.1.1
Ember Data : 1.0.0-beta.6
Handlebars : 1.2.1
jQuery     : 1.10.2

1 个答案:

答案 0 :(得分:1)

看起来您正在寻找的属性是isDeleted。所以你可以修改那个控制器:

App.TasksController = Ember.ArrayController.extend({
    dirtyTasks:   Ember.computed.filterBy('content', 'isDirty', true),
    deletedTasks: Ember.computed.filterBy('content', 'isDeleted', true),
    changedTasks: Ember.computed.union('dirtyTasks', 'deletedTasks')
});

<强>更新

我看到你对自动更新内容的意思。我将这个跟踪到了Ember Store使用的recordArrayManager。当您在商店中发出findfilter时,返回的是过滤后的记录数组,应用于该数组的其中一个过滤器是其中的所有记录都不在一个isDeleted州。您可以在行动中看到here

在我的头顶,我无法看到解决方案,我特别满意。但是,如果您绝对需要数组控制器中的内容包含deletedRecords,那么您需要在自定义RecordArrayManager类中覆盖我上面链接的方法,然后在应用程序的存储的初始化中设置该recordArrayManager,如{{ 3}}

seen here

请注意,这是一个肮脏的黑客,你真的不应该这样做。坦率地说,我认为更好的解决方案是,而不是使用ember数据方法删除记录,提出你自己标记的customIsDeleted状态并将模型设置为该状态而不是直接删除它,如果你真的希望它留在屏幕上。