2014-12-26 218 views
0

我有3模型中的主幹應用程序已經嵌套集合:骨幹收集問題

模型結構:

Layout extends Backbone.Model 
-> sections: new Sections extends Backbone.Collection 


Section extends Backbone.Model 
-> rows: new Rows extends Backbone.Collection 

現在,如果我在佈局兩段模型和我去,並添加一行模型添加到Section.rows集合中的一個,它將它添加到兩個部分。

順便說一句,我從一個事件的視圖添加它。

在此先感謝。

回答

0

得到了解決方法。我可以通過將默認屬性添加到我的模型來重現您的工作流程。

這樣的:

var Section = Backbone.Model.extend({ 
    defaults: { 
     rows: new Rows 
    } 
}); 

var Layout = Backbone.Model.extend({ 
    defaults: { 
     sections: new Sections 
    } 
}); 

那時候真的,如果我將部分的新行的行添加到一個它的出現增加了所有部分的行集合。所以我這樣做(粗魯的例子):

var Row = Backbone.Model.extend({ 
    defaults: { 
     rowData: 0 
    } 
}); 

var Rows = Backbone.Collection.extend({ 
    model: Row 
}); 

var Section = Backbone.Model.extend({ 
    //defaults: { 
    // rows: new Rows 
    //} 
}); 

var Sections = Backbone.Collection.extend({ 
    model: Section 
}); 

var Layout = Backbone.Model.extend({ 
    //defaults: { 
    // sections: new Sections 
    //} 
}); 

var LayoutView = Backbone.View.extend({ 

}); 

var lView = new LayoutView({ model: new Layout }); 
lView.model.set('sections',new Sections()); 
var sections = lView.model.get('sections'); 
sections.add({id: 1, name: 's1',rows: new Rows() }); 
sections.add({id: 2, name: 's2',rows: new Rows() }) 
var rows = sections.get(1).get('rows'); 
rows.add({id:'r1',rowsData: 10}); 
console.log(lView.model.toJSON()); 
0

@aleha你是對的問題是模型中的默認屬性設置。因爲他們共享相同的記憶空間(javascript:通過引用而不是按值傳遞)。

所以我所做的是在初始化函數

initialize: function() { 
    this.set('rows', new Rows()); 
} 

因此,沒有必要去做像你上面做:

sections.add({id: 1, name: 's1',rows: new Rows() }); 

因此解決和自動化:)

感謝您的幫助。