簡體   English   中英

如何更新集合中的所有模型-Backbone.js

[英]How can I update all models in a collection - Backbone.js

我正在設置集合中所有模型的value屬性(在_.each循環中)。 循環完成后,每個value屬性不變。 我相信這是因為_.each循環正在為每個模型創建一個新的實例變量。 有沒有更新我不關注的集合模型的標准方法?

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

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方法或defaults方法( http://backbonejs.org/#Model-defaults )。 這是不可以做的事情

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

  value: 1,

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

只需使用collection.each方法。

myCollection.each(function(model) {
 // do stuff
});

結帳Underscore.js方法由Backbone.Collection擴展: http : //backbonejs.org/#Collection-Underscore-Methods

您已經在更新集合中的所有模型,但是您被誤以為您不是在登錄時錯誤地訪問了該值。

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

該行未get模型的值,而是在模型實例本身上記錄了value屬性,表明您未正確初始化模型。

pluck是一個集合的方法(如each ,作為@SimonBoudrias指出)。 在可能的情況下使用集合時,應使用指定的方法,而不要用下划線將它們包裝起來。

使用Collection#pluck ,您的第一個和最后一個控制台日志將如下所示:

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

使用它,您將看到更接近您期望的內容,但是如前所述,初始日志仍然是undefined數組,因為value似乎是模型實例的屬性,而不是適當的Model屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM