Список не обновляется после удаленияRecord
У меня есть ArrayController, контент которого определен в таком маршруте:
App.UsersRoute = Ember.Route.extend({
model: function() {
return App.User.find();
},
setupController: function(controller, model) {
this._super(controller, model);
this.controllerFor('application').set('currentRoute', 'users');
}
});
И я перечисляю данные в шаблоне:
<ul>
{{#each user in arrangedContent}}
<li>
{{user.lastName}} {{user.firstName}}
{{#linkTo "users.edit" user class="btn btn-primary btn-small"}}EDIT{{/linkTo}}
</li>
{{/each}}
</ul>
Он отлично работает.
Если я создаю новый элемент, он автоматически добавляется в список в шаблоне:
App.UsersNewRoute = Ember.Route.extend({
model: function() {
return App.User.createRecord({firstName: '', lastName: ''});
}
});
Но когда я удаляю элемент в представлении "edit", он не работает:
App.UsersEditController = Ember.ObjectController.extend({
...
destroy: function() {
this.get('content').deleteRecord();
this.get('store').commit();
this.transitionToRoute("users.index");
}
});
Но в "новом" представлении, если я удалю новый созданный элемент, он работает (без фиксации).
В контроллере редактирования, если я удаляю "фиксацию", список обновляется, но когда я делаю другое действие, список перезагружается, и удаленный элемент снова появляется (обычный).
Итак, как удалить элемент?
ПРИМЕЧАНИЕ. Я использую "главный" код данных ember и ember-данных, обновленных только сейчас.
Ответы
Ответ 1
Я просто испытал подобную проблему в очень разных условиях.
Я использую grunt-ember-boilerplate" (настоятельно рекомендуется, если вы находитесь в CoffeeScript и Ember). Он пришел с версией Ember Data, в которой была странная ошибка, в которой исправленные удаленные записи сохранялись в кеше и, следовательно, не удалялись из списков.
У меня не было времени выяснить, что именно происходит; поэтому я просто попытался получить последнюю сборку Ember Data (2013-05-10 10:20:34 -0700) и сразу исправил проблему.
Просто опубликуйте здесь, если кто-то другой столкнется с подобной проблемой.
Кроме того, я согласен с Якубом Арнольдом, когда он говорит о том, чтобы не совершать "магазин" и использовать прослушиватели событий, чтобы обеспечить чистоту. Только сегодня я нашел очень полезную запись в блоге по теме " Шаблоны и анти-шаблоны для данных Ember".
Ответ 2
Вы также должны перейти только после удаления записи, так как commit происходит асинхронно.
var user = this.get("content");
user.one("didDelete", this, function() {
this.transitionTo("users.index");
});
user.deleteRecord();
user.get("transaction").commit();
Также обратите внимание, что совершение транзакции предпочтительнее, чем приходить в магазин. Если позже вы решите добавить запись в свою собственную транзакцию, у вас будет меньше работы, и если вы этого не сделаете, она по-прежнему будет использовать тот же defaultTransaction
, что и при входе в магазин.