2015-09-16 76 views
0

剛開始時使用Backbone,如果這是一個基本問題,那麼很抱歉。使用一組對象作爲Backbone模型中的屬性

我有一個模型,它有一個對象數組作爲屬性,像這樣。

var Ship = Backbone.Model.extend({ 
    defaults: { 
     coordinates: [] 
    }, 
    initialize: function() { 
     this.on('change:coordinates', this.onChange); 
    }, 
    onChange: function() { 
     console.log('CHANGED!!'); 
    }, 
}); 

var ship = new Ship(); 

ship.set('coordinates', [{xAxis:1, yAxis:1}, {xAxis:1, yAxis:2}]); 

var targetHitCoordinates = _.findWhere(ship.get('coordinates'), {xAxis:1, yAxis:1}); 

targetHitCoordinates.isHit = true; 

console.log(ship); 

當我將isHit設置爲true時,即使將屬性添加到數組中的座標對象,也不會觸發更改事件。

任何想法?

+0

是否觸發了第一個座標.set? –

+0

是的,但當isHit被改變時沒有 – David

回答

0

我想這是因爲你沒有使用.set方法。

類似的東西應該工作:

var targetHitCoordinates = _.findWhere(ship.get('coordinates'), {xAxis:1, yAxis:1}); 

targetHitCoordinates.isHit = true; 

ship.set('coordinates', [targetHitCoordinates]); 

讓我知道,如果它

我不知道,瞭解你,你的管理模型屬性的方式,但無論如何,你需要使用.SET ()

所以,你可以使用探微

ship.set({ hit:true }); 

和定義另一個聽衆的熱門事件。

+0

嗨弗朗索瓦。我認爲這將觸發更改事件,但它也會覆蓋整個數組,而不僅僅是更新屬性。 – David

+0

只是順便說一句,現在使用的標準方法是使用對象,鍵值對,如ship.set({coordinates:[targetHitCoordinates]}); – slinhart

相關問題