Итерация по Backbone.PageableCollection не работает

У меня есть Backbone.PageableCollection (@customers) чьи модели я хотел бы повторить. Я перепробовал много вещей, включая то, что я считал очевидным:

@customers.each (customer) ->
  console.log customer

К сожалению, это выдает что-то похожее на коллекцию, но в нем нет данных модели. Я знаю, что коллекция была полностью синхронизирована, потому что когда я выхожу @customers.models Я могу увидеть массив данных модели:

Странно, если я сделаю это:

_.each @customers.models, (customer) ->
  console.log customer

Я получаю такой же бесполезный результат, как указано выше.

Что мне не хватает?

Обновить:

Присмотревшись к объекту, зарегистрированному console.log customer в обоих подходах это выглядит как модель с ненаселенными атрибутами. Это странно с тех пор @customers.models показывает массив моделей с полностью заполненными атрибутами. В дополнение each цикл выполняется только один раз.

Обновление 2:

Я попробовал следующее в соответствии с предложением Агконти ниже:

@customers.each (@customers, c) ->
  console.log @customers, c

который компилируется в:

      return this.customers.each((function(_this) {
        return function(customers, c) {
          _this.customers = customers;
          return console.log(_this.customer, c);
        };
      })(this));

и журналы undefined и 0,

Обновление 3:

Если я установлю:

window.customers = @customers

и затем введите это в консоли:

_.each(customers.models, function (customer) { return console.log(customer)});

Я получаю журнал всех моделей клиентов. Я действительно смущен сейчас...

Обновление 4:

Я сузил это до проблемы времени. Я запускаю этот код после синхронизации коллекции, но кажется, что анализ модели в коллекции происходит позже.

3 ответа

Это оказалось некоторой проблемой в моем коде получения / синхронизации. Этот код не должен выполняться до тех пор, пока коллекция клиентов не будет полностью синхронизирована, но что-то (пока не определенное) позволяет ему работать до полной синхронизации коллекции.

Вам нужно указать итератор для .each(), Сделайте это вместо этого:

@customers.each (@customers, c) ->
  console.log c

Если вы проверите документацию по магистрали на .each() Вы видите, что он принимает три свойства; (list, iterator, [context]), Поскольку вы просто регистрируете клиента, а не итератор коллекции клиентов, она просто регистрирует всю коллекцию.

Модели магистральной коллекции хранятся в Collection.modelsЭто то, что вам нужно перебрать. когда делаешь _.each @customersвы перебираете атрибуты объекта коллекции, а не его модели, так что вы хотите_.each @customers.models, (customer) -> console.log customer

Другие вопросы по тегам