在我正在构建的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)并且不会从视野中消失。
任何帮助?谢谢!!
答案 0 :(得分:1)
在您的特定情况下,除非您使用某种知道在属性更改时从自身中删除记录的智能集合,否则商店不会知道从任何随机数组中删除记录。在大多数情况下,您需要手动删除它。
在集合中构建的唯一删除已删除记录的Ember数据是使用store.all和store.filter构建的集合(注意:store.find('type'),不带任何参数返回store.all)。他们知道删除它的原因是因为它们始终只包含未删除的记录。
someCollection.removeOjbect(file);
如果您尝试将已删除的记录提交到后端,只有在您致电save
后才会发生。如果你想在一次失败中做到这一点,你可以使用destroyRecord
。
file.deleteRecord();
file.save();
或
file.destroyRecord():