Прослушивание события магазина

В моем приложении App.NodesIndexController я делаю что-то вроде:

destroyAllRecords: function () {
 var _this=this;
 Bootstrap.ModalPane.popup({
 heading: 'Warning',
 message: 'Are you sure you want to delete all nodes?',
 primary: 'Ok',
 secondary: 'Cancel',
 showBackdrop: true,
 callback: function(opts, event) {
 if (opts.primary) {
 _this.forEach(function(node) {
 console.log('Deleting node %o', node);
 node.deleteRecord();
 });
 var store = _this.get('store').commit();
 store.commit();
 store.on('didDelete', toggleMessageTray.bind(this, 'All nodes have been successfully deleted'));
 }
 }
 });
}

Но я действительно не знаю, как прослушать событие "магазин был обновлен". Я не хочу слушать отдельные nodes didDelete событий, но в глобальное событие хранилища, вызванное после совершения фиксации.

Три вопроса:

  1. Есть ли такое событие?
  2. Где определяются события магазина? Я не вижу документацию об этом (это единственная документация, которую я знаю о магазине)
  3. Есть ли лучший способ удалить все записи, чем удалить каждый из них в цикле?
1 ответ

Прежде всего, хороший вопрос! Позвольте мне попытаться дать вам упрямый ответ.

Есть ли такое событие?

Насколько я знаю, в магазине нет плачевного такого служения.

Где определяются события магазина? Я не вижу документацию об этом (это единственная документация, которую я знаю о магазине)

Поскольку данные ember-данных еще не готовы к производству, единственная реальная истина заключается в исходном коде и встроенных комментариях. Но, как правило, при сохранении изменений в бэкэнд и в зависимости от вашей установки участвующие классы: Store, RESTAdapter и JSONSerializer, посмотрите там, вы можете расширить все эти классы, чтобы заставить их работать по RESTAdapter JSONSerializer.

Есть ли лучший способ удалить все записи, чем удалить каждый из них в цикле?

Да и нет, задав параметр bulkCommit true на вашем адаптере, только один вызов будет bulkCommit на бэкэнд с хешем всех записей, но только в случае создания записей (спасибо @MilkyWayJoe за исправление меня, см. Комментарий ниже), но это подразумевает, очевидно, что ваш бэкэнд может справиться с этим, если он это сделает, конечно, улучшит производительность.

ИМХО вам, где лучше, расширив RESTAdapter по умолчанию и написали собственный адаптер и подключились к методу didDeleteRecords так как этот метод вызывается адаптером, когда все записи удаляются.

Итак, я надеюсь, что мой ответ поможет вам сделать правильный выбор - это означает использование данных ember и создание собственного адаптера или переход с помощью обычных старых ajax вызовов для работы со всеми серверными материалами aka:

App.IndexRoute = Ember.Route.extend({
 model: function() {
 return $.getJSON(...);
 }
});

Если вы решите отказаться от данных ember-данных, в качестве отправной точки взгляните на сборку приложений для discourse.org, репо здесь. Он строится без данных ember-данных и может служить хорошим местом для того, чтобы увидеть, как это можно сделать. Также стоит упомянуть это сообщение в блоге, в котором подробно описывается, как дискурс.org управляет им сайтом без данных ember-данных.

licensed under cc by-sa 3.0 with attribution.