我正在forEach循环中创建一个新的Backbone Model,然后在其中运行另一个forEach循环并创建另一个Backbone Model并将其作为属性传递回以前的Model。
然而,到最后,儿童模型似乎被添加到所有一级模型中。
var page =
{ rows:
[
{ layout: '1:1:1'
, columns:
[
{ widgets:
[
{
type: 'twitter'
}
, {
type: 'facebook'
}
]
}
, { widgets:
[
{
type: 'image-slider'
}
, {
type: 'instagram'
}
]
}
, { widgets:
[
{
type: 'instagram'
}
]
}
]
}
, { layout: '2:1'
, columns:
[
{ widgets:
[
{
type: 'twitter'
}
]
}
, { widgets:
[
{
type: 'image-slider'
}
]
}
]
}
]
}
var app = {
models: {}
, collections: {}
, views: {}
}
app.models.Row = Backbone.Model.extend({
childColumns: []
})
app.models.Column = Backbone.Model.extend({
childWidgets: []
})
var renderedRows = []
_.each(page.rows, function (row, rowIndex) {
////////////// * ROWS * //////////////
var rowModel = new app.models.Row({
layout: page.rows[rowIndex].layout
})
renderedRows.push(rowModel)
_.each(row.columns, function (column, columnIndex) {
////////////// * COLUMN * //////////////
var columnModel = new app.models.Column()
rowModel.childColumns.push(columnModel)
})
})
console.log('first row child columns', renderedRows[0].childColumns)
console.log('second row child columns', renderedRows[1].childColumns)
答案 0 :(得分:2)
由于您正在定义模型,这种情况正在发生。
app.models.Row = Backbone.Model.extend({
childColumns: []
})
问题是childColumns
在定义中被设置为空数组[]
。 new
每次都不为您创建一个新数组,它为每个模型分配相同的数组引用。这意味着您创建的所有Row
条目都引用了相同的数组。
每次创建新条目时,您都希望创建一个新数组,而不是引用单个数组:
app.models.Row = Backbone.Model.extend({
childColumns: null
})
app.models.Column = Backbone.Model.extend({
childWidgets: null
})
// ...
_.each(page.rows, function (row, rowIndex) {
var rowModel = new app.models.Row({
layout: page.rows[rowIndex].layout
})
// Initialize a new array here
rowModel.childColumns = []
renderedRows.push(rowModel)
_.each(row.columns, function (column, columnIndex) {
var columnModel = new app.models.Column()
// Initialize a new array here
columnModel.childWidgets = []
rowModel.childColumns.push(columnModel)
})
})
这是一个带有修复的jsFiddle:http://jsfiddle.net/5Epxz/1/
如果你想让它更像Backbone-ish,你也可以在模型的initialize
方法中进行数组初始化。