Ember.js:能够添加/删除记录,但删除的记录仍在显示

时间:2014-05-30 22:27:00

标签: ember.js ember-data

在我正在构建的Ember应用程序中,我的一个视图是文件管理器,其中包含行中的文件列表,与用户的hasMany关系。在代表单个文件的每一行的末尾,我有一个删除按钮。

当我运行应用程序并转到文件视图时,它正在通过数据存储使用API​​中的文件填充列表。我还能够将文件拖放到视图中,并将其成功添加到数据存储中,并更新视图以显示新的行/文件。

我正在尝试添加删除文件的功能。我的问题是:当我点击删除文件时,在调用 .deleteRecord()时,数据库API提供的任何文件都将从模型/数据存储中删除,并且视图将更新。 然而,我删除和放置的任何文件都将从数据存储中删除,但不会删除模型(仍显示在数组中),因此仍会显示在列表中

**注意:我还不关心持久性,只是在模型和视图中添加/删除。 **

这是我将代码添加到列表中的代码(显然可行)

 App.UserFilesController = Ember.ArrayController.extend({
   sortProperties: ['name'],
   sortedFiles: Ember.computed.sort('model', 'sortProperties'),
   actions: {
     addFile: function (fileToAdd) {
       var store = this.store;
       var newId = '1235asdf'+this.counter; //just for testing purposes!
       var thisFile = store.createRecord('file', {
         id: newId,
         name: fileToAdd.name,
         dateAdded: new Date(),
       });

       this.pushObject(thisFile);
       //*I get a valid response back from this.... *
       store.find('file', newId). then (function(result) {
         console.log('File found in the store! id: ', result.get('id'));
       });

 ... //*appears to be working... 

这是我从列表中删除文件的代码(适用于从db加载到存储中的文件数据):

    removeFile: function (file) {
      console.log('Remove the file with id: ', fileToRemove.get('id'));
      var store = this.store;
      store.find('file', fileToRemove.get('id')). then ( function (file) {
        file.deleteRecord();
        var result = file.get('isDeleted');
        console.log('File ', file.get('id'), ' removed: ', result);
      });
    },
 ... working for files from db, not files dropped in

当我删除文件(刚刚删除)时,file.get('isDeleted')的上述结果返回true BUT 文件仍显示在控制器和模型后面的数组中(通过Ember Inspector)并且不会从视野中消失。

任何帮助?谢谢!!

1 个答案:

答案 0 :(得分:1)

在您的特定情况下,除非您使用某种知道在属性更改时从自身中删除记录的智能集合,否则商店不会知道从任何随机数组中删除记录。在大多数情况下,您需要手动删除它。

在集合中构建的唯一删除已删除记录的Ember数据是使用store.all和store.filter构建的集合(注意:store.find('type'),不带任何参数返回store.all)。他们知道删除它的原因是因为它们始终只包含未删除的记录。

someCollection.removeOjbect(file);

如果您尝试将已删除的记录提交到后端,只有在您致电save后才会发生。如果你想在一次失败中做到这一点,你可以使用destroyRecord

file.deleteRecord();
file.save();

file.destroyRecord():