Подтвердить что ты не робот

Список не обновляется после удаления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-данных, обновленных только сейчас.

4b9b3361

Ответ 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, что и при входе в магазин.