2013-05-06 66 views
0

我正在設置集合中所有模型的value屬性(在_.each循環中)。循環結束後,每個value屬性都保持不變。我相信這是因爲_.each循環正在爲每個模型創建一個新的實例變量。有沒有一種標準的方式來更新我沒有遵循的集合的模型?如何更新集合中的所有模型 - Backbone.js

應該強制骰子成直線的代碼(1,2,3,4,5,6)。 rollableDice是指具有value屬性的骨幹模型的骨幹集合。這是一個容器模型的方法:

makeStraight: function() { 
    console.log('making straight'); 
    console.log(_(this.rollableDice.models).pluck('value')); 
    var counter = 1; 
    _(this.rollableDice.models).each(function(die) { 
    console.log(die.get('value')); 
    die.set('value', counter); 
    console.log(die.get('value')); 
    counter++; 
    }); 
    console.log(_(this.rollableDice.models).pluck('value')); 
}, 

這是我在控制檯上看到輸出:

making straight 
[1, 1, 3, 5, 2, 1] 
undefined 
1 
undefined 
2 
undefined 
3 
undefined 
4 
undefined 
5 
undefined 
6 
[1, 1, 3, 5, 2, 1] 

//編輯 這是控制檯輸出,我期望看到:

making straight 
[1, 1, 3, 5, 2, 1] 
1 
1 
1 
2 
3 
3 
5 
4 
2 
5 
1 
6 
[1, 2, 3, 4, 5, 6] 

//編輯我將在@ numbers1311407的迴應中顯示模型代碼。我不應該使用模型方法來存儲和訪問屬性。相反,即使在模型內部,我也應該使用get/set方法或默認方法(http://backbonejs.org/#Model-defaults)。 這是什麼不能做

var Die = Backbone.Model.extend({ 
    initialize: function() { 
    _.bindAll(this, 'roll') 
    }, 

    value: 1, 

    roll: function() { 
    this.value = _.random(1,6); 
    }, 
}); 
+0

等一下,你是否在上面的'makeStraight'方法中使用了上面的模型代碼?我問,因爲Die.value與Die.attributes.value不一樣。後者是你調用'die.set('value',1)'時發生了改變。 – jackwanders 2013-05-06 18:40:27

+0

是的,那正是我正在做的。 @ numbers1311407的迴應如下表述清楚。現在我正在使用模型屬性。 – Nathan 2013-05-07 14:26:42

回答

3

你已經更新所有的模型集合中,但是可以通過訪問值是欺騙,以爲你是不是記錄時不正確。

console.log(_(this.rollableDice.models).pluck('value')); 

這行做了模型的不get的價值,它的登錄模型實例本身value性質,提示您初始化不當的車型。

pluck是一種收集方法(正如each,正如@SimonBoudrias指出的那樣)。在可能的情況下處理集合時,應該使用指定的方法,而不是用自己的下劃線包裝它們。

使用Collection#pluck,你的第一個和最後一個控制檯日誌是這樣的:

console.log(this.rollableDice.pluck("value")); 

利用這一點,你會看到的東西更接近你所期望的,但正如指出的那樣,最初的日誌仍然會一個undefined的數組,因爲value看起來是模型實例的屬性,而不是正確的Model屬性。

+1

僅供參考,將Underscore方法的完整列表混合到[collections](http://backbonejs.org/#Collection-Underscore-Methods)和[models](http://backbonejs.org/#Model-Underscore-方法)在骨幹文檔中。 – 2013-05-06 18:28:48

相關問題