model.set在控制台中进行woking但不在我的实际脚本中

时间:2015-04-19 10:47:37

标签: javascript backbone.js underscore.js

我正在尝试在我的集合的每个模型中设置一个属性,但我使用的代码不起作用(属性尚未更新),但是当我直接将其运行到控制台时它可以工作。这是我的代码,有问题的代码是questions.forEach ...:

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 个答案:

答案 0 :(得分:1)

在尝试更新模型之前,您必须确保提取已完成。

将更新功能放在fetch的回调中 (确保在调用fetch之前设置了questionOrder。)

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

在控制台中运行时,您无需等待获取。