В приложении Ember, которое я создаю, у меня есть ArrayController, управляющий списком элементов с несколькими столбцами данных для каждого объекта записи в массиве с кнопкой сортировки в каждом заголовке столбца в представлении. Я настроил список для сортировки по заданному столбцу в рекомендуемом методе Балинта Эрди here. Вы увидите эту сортировку в моем коде ниже.Ember.js: Удаление элемента из сортированного ArrayController
Сортировка прекрасно работает. Однако проблема возникает, когда я удаляю элемент из массива. В настоящее время, когда я пытаюсь удалить элемент из массива, правильный элемент, очевидно, удаляется из массива и удаляется из хранилища, а удаление сохраняется на моем сервере. Однако после удаления элемента мое мнение неверно. В некоторых случаях неправильный элемент отображается как удаленный, в других случаях ни один элемент не отображается как удаленный. Тем не менее, если я снова нажимаю сортировку, представление обновляется правильно.
Итак, индекс массива, очевидно, выходит из некоторых способов, но я не уверен, как и все мои попытки применить трюки других не работают!
Вот мой маршрут объект:
App.UsersFilesRoute = Ember.Route.extend({
model: function() {
return this.modelFor('users').get('files');
}
});
Вот мой ArrayController:
App.UsersFilesController = Ember.ArrayController.extend({
sortProperties: ['name'],
sortedFiles: Ember.computed.sort('model', 'sortProperties'),
actions: {
addFile: function(file) {
var newFile = this.store.createRecord('file', {
name: file.name.trim(),
fileSize: file.size,
loaded: false
});
this.pushObject(newFile);
},
sortBy: function (sortProperties) {
this.set('sortProperties', [sortProperties]);
},
removeFile: function (fileToRemove) {
var _this = this;
var file = this.store.find('file', fileToRemove.get('id'));
file.then(function (file) {
_this.removeObject(file);
file.deleteRecord();
file.save();
});
},
saveFile: function (file) {
....
}
}
});
И вот мой код шаблона:
<div class="hidden-xs row user-file-header-row">
<div class="col-sm-5 col-md-5 user-file-header">
File Name
<button type="button" class="btn-xs btn-default files-sort-btn" {{ action 'sortBy' 'name'}}></button>
</div>
<div class="col-sm-1 col-md-1 user-file-header">
Size
<button type="button" class="btn-xs btn-default files-sort-btn" {{ action 'sortBy' 'fileSize'}}></button>
</div>
</div>
{{#each file in sortedFiles}}
<div class="row user-file user-file-break">
<div class="col-xs-11 col-sm-5 col-md-5 user-file-name">
<a {{ bind-attr href="file.path" }} >{{ file.name }} </a>
</div>
<div class="col-xs-9 col-sm-1 col-md-1">
{{ format-file-size file.fileSize }}
</div>
<div class="col-xs-9 col-sm-1 col-md-1">
<button type="button" class="btn-xs btn-default files-list-btn" {{ action 'removeFile' file }}></button>
</div>
</div>
{{/each}}
Примечание: Существует некоторое сходство мой вопрос и этот другой вопрос StackOverflow: After using jQuery UI to sort an Ember.js item, using Ember Data's model.deleteRecord() doesn't work, однако, я попытался t o примените этот ответ на мою собственную проблему без успеха. Кроме того, у меня нет jQuery в моей сортировке.
Вы будете показывать формат файла-файла, как правило, ui going haywire связан с плохим html, хотя ваше выше выглядит отлично. Мой пример не показывает аналогичную проблему: http://emberjs.jsbin.com/xokemala/1/edit – Kingpin2k