0

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

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

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

enter image description here

Как ни странно, если бы я это сделать:

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

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

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

Update:

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

Update 2:

Я попробовал следующее за предложением agconti в поле ниже:

@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.

Update 3:

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

window.customers = @customers 

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

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

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

Update 4:

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

+0

Что такое возврат, когда вы регистрируете '@ клиентов'? – agconti

+0

'undefined' ...... – Erik

+0

Я также обновил обновление 2. Этот синтаксис не имеет для меня никакого смысла. Я все еще ожидал бы, что работаю '@customers.each (клиент) -> клиент console.log. – Erik

ответ

0

Необходимо указать итератор для .each(). Сделайте это вместо того, чтобы:

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

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

+0

Это звучит как хороший момент, который я попробую в ближайшее время, но в базовой документации не упоминается итератор. Это показывает: books.each (функция (книга) { книга.publish(); }); – Erik

+0

@ Erik Я не знаком с плагином для paginator, поэтому дайте мне знать, если это сработает :) – agconti

+0

Нет радости. 'console.log c' logs 0. Есть 52 клиента, и это происходит только один раз. – Erik

0

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

+1

Да, это то, что я делаю во втором примере кода. В базовом документе также говорится, что '@customers.each (клиент) -> клиент console.log должен работать тоже - это то, что я пробовал в первом примере кода. – Erik

+0

ой, извините, я пропустил это. –

0

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

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

  • Нет связанных вопросов^_^