2013-10-24 3 views
2

Итак, я все еще очень новичок в Backbone. Мой вопрос заключается в следующем: У меня есть коллекция, которая сделана так:итерации по массиву в коллекции

... 
isCollection: true, 
parse: function(response) { 
    if (response.status == 'ok') { 
     this.page = response.result.page; 
     this.count = response.result.count; 
     this.total = response.result.total; 
     this.sort = response.result.sort; 
     this.ascending = response.result.ascending; 
     this.myReports = response.result.results; 
     return this; 
    } else { 

    } 

Где this.myReports является массивом объектов. Мой вопрос: как я перебираю массив (myReports)? Должен ли я преобразовать его в коллекцию? Если я пытаюсь использовать .each, я получаю сообщение об ошибке .each не поддерживается.

Спасибо за помощь!

ответ

0

При вызове myCollection.each на коллекции Backbone, вы, по сути вызова each метода Underscore, но он представляется вам немного лучше как метод Backbone.Collection.

Вы могли бы просто использовать метод на массиве:

_.each(this.myReports, function (report) { 
    // do whatever with report 
}) 

ли вы должны преобразовать его в коллекцию магистральной другой вопрос. Если вы хотите сохранить в нем модели или использовать любую из функций Backbone.Collection, тогда обязательно, конвертируйте его, используя каждый из методов выше.

+0

Это сделало, спасибо! – jason

0

Пробовал ли вы пробовать его через простой массив js?

что-то вроде:

for(var i in myArray){ 
    var item = myArray[i]; 
    //dosomething 
} 

Может быть, стоит попробовать underscorejs для расширенных функций массива.

0

Я бы поставил элементы response.result.results в коллекции так:

parse: function(response) { 
    if (response.status == 'ok') { 
     this.page = response.result.page; 
     this.count = response.result.count; 
     this.total = response.result.total; 
     this.sort = response.result.sort; 
     this.ascending = response.result.ascending; 
     return response.result.results; 
    } else { 

    } 
} 

Теперь, если fetch рый сбор завершается успешно, и response.status является 'ok', то:

  • ваша коллекция будет имеют поля page, count, total, sort и ascending,
  • эти поля будут содержать значения, полученные в области response.result,
  • length коллекции будет length из response.result.results и
  • элементов коллекции будут пункты response.result.results, так вы можете перебирать их внутри обработчика successfetch.

Если fetch не удается, или response.status не 'ok', то длина коллекции будет равна нулю. Поля page, count, total, sort и ascending будет undefined, если вы не определите их куда-нибудь, например, в initialize или в else ветви внутри выше parse функции.

Here является рабочим примером. Выход выводится на консоль, т.е. в Chrome нажмите F12 и перейдите на вкладку Консоль. В любом случае, поскольку коллекции Backbone имеют метод, называемый sort, я бы изменил имя поля sort на что-то еще (sorted, toBeSorted и т. Д. - я не знаю семантики этого поля).

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