2012-11-19 73 views
0

下面是描述嵌套樹模型和json中的示例數據的代碼。 如何使用提供的data重置blocks如何重置主幹模型的嵌套樹

var Block, Blocks, data, blocks; 

Block = Backbone.Model.extend({ 
    initialize: function() { 
    this.blocks = new Blocks; 
    } 
}); 

Blocks = Backbone.Collection.extend({ 
    model: Block 
}); 

data = [ 
    { 
    id: 1, 
    blocks: [ 
     {id: 2, blocks: [{id: 3}]}, {id: 4} 
    ] 
    }, 
    { 
    id: 5 
    } 
]; 

blocks = new Blocks; 
+0

爲什麼Block包含Blocks集合?這是一個循環模型。你打算這麼做嗎? –

+0

是的,我需要一個塊的樹,其中每個塊都嵌套塊。 –

回答

0
var Block, Blocks, data, blocks; 

Block = Backbone.Model.extend({ 
    initialize: function() { 
    // access 'blocks' via attributes 
    // and initialize collection by passing the attributes in 
    this.attributes.blocks = new Blocks(this.attributes.blocks); 
    } 
}); 

Blocks = Backbone.Collection.extend({ 
    model: Block 
}); 

data = [ 
    { 
    id: 1, 
    blocks: [ 
     { id: 2, 
     blocks: [ 
      { id: 3 } 
     ] 
     }, 
     { id: 4 } 
    ] 
    }, 
    { 
    id: 5 
    } 
]; 

// initialize blocks by passing 'data' in 
blocks = new Blocks(data);​ 

好了,好了,因爲屬性attributes下保存初始化之前,你需要調用this.attributes.blocks在你的初始化函數,以確保沒有混淆了this.blocks(其中有)。

您還需要通過將數據傳遞到它的構造函數來初始化blocks,對於Blocks的每個其他實例,即每個Block內都存儲的那些實例,這些值也是相同的。

+0

謝謝,我剛剛提出了類似的問題,儘管我將塊存儲在'model.blocks'而不是'model.attributes.blocks'中。 –

+0

如果您沒有足夠的理由,我會小心的做到這一點。運行你的初始代碼片段,使用正確的參數給構造函數,但不使用this.attributes,你會發現你的對象在檢查時最終會遇到.blocks和.attributes.blocks,這可能使事情變得複雜,並且通常違背Backbone約定。 –

+0

在這個提示中:http://backbonejs.org/#FAQ-nested嵌套集合不放在屬性中。我認爲最好將屬性結構保存爲普通的json對象。 –