2012-05-25 4 views
6

Согласно документу: http://documentcloud.github.com/backbone/#FAQ-events коллекция имеет событие синхронизации, когда я что-то делаю для синхронизации с сервером. Я пытаюсь вызвать метод fetch в коллекции и ждать события синхронизации на нем, но это никогда не произойдет. Событие добавлено, но мне нужно только одно событие после синхронизации всех элементов коллекции для обновления соответствующего представления. Есть еще один способ получить это событие?Событие синхронизации backbone.js в коллекции

ответ

2

Я считаю, что событие «sync» запускается только при изменении модели. Поэтому, если вы создадите, обновите или удалите модель, произойдет событие «sync».

В вашем случае, я думаю, вы хотите прослушать событие «перезагрузки» в коллекции.

Редактировать: Если вы устанавливаете опцию {add:true}, то нет единственного события Магистра, которое будет срабатывать после того, как все модели будут добавлены. У вас есть несколько вариантов:

  1. Просто слушать add события и ожидать, что она будет неоднократно вызываться
  2. эмулировать одно событие с помощью обработчика, который был подавлением дребезга контактов с помощью функции _.debounce().
  3. Возвращаемое значение от fetch() является объектом XMLHttpRequest jQuery. Он реализует интерфейс jQuery Deferred. Так что вы могли бы послушать этот финиш. Например:

    myCollection.fetch({add:true}).done(function(){ 
        myView.render(); //or whatever 
    }); 
    
+0

Событие сброса не подходит для моих нужд, потому что я вызываю выборку с помощью параметра add: true. –

5

Решения для разжигания синхронизации события maunually в «успех» обратного вызова, переданном в качестве паров для выборки метод.

this.collection.fetch({add: true, success: function(collection, response){ 
      collection.trigger('sync'); 
}}); 
+1

Что касается магистрали 0.9.9, добавление триггера синхронизации при успешном обратном вызове больше не требуется. Из http://backbonejs.org/#changelog Консолидированные события «sync» и «error» в Backbone.sync. Теперь они запускаются независимо от наличия успешных или обратных вызовов. –

Смежные вопросы