2015-04-19 4 views
0

Я пытаюсь установить атрибут в каждой из моделей моей коллекции, но код, который я использую, не работает (атрибуты не обновлены), хотя это работает, когда я запускаю его прямо в консоли. Вот мой код, код в вопросе является questions.forEach ...:model.set woking в консоли, но не в моем фактическом скрипте

var Question = Backbone.Model.extend({ 
    urlRoot: "questions.json" 
}); 

var Questions = Backbone.Collection.extend({ 
    model: Question, 

    url: "questions.json", 

    parse: function(response){ 
     return response.questions; 
    } 
}); 

var questions = new Questions(); 
questions.fetch(); 

var questionOrder = []; 

while (questionOrder.length != 10){ 
    var randomNum = Math.floor(Math.random() * 10); 
    if (questionOrder.indexOf(randomNum) == -1) { 
     questionOrder.push(randomNum); 
    } 
} 

questions.forEach(function(model, i) { 
    model.set({"order": questionOrder[i]}); 

}); 

ответ

1

Вы должны убедиться, что выборка будет завершена, прежде чем пытаться обновить модели.

Поместите функцию обновления в обратный вызов на выборку.
(Убедитесь, что вы настроили questionOrder перед вызовом принести.)

questions.fetch(success: function() { 
    questions.forEach(function(model, i) { 
     model.set({"order": questionOrder[i]}); 
    }) 
;); 

При работе в консоли вам не нужно ждать выборки.

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