你试图做的事情没有任何意义。你defaults
是一个包含单个对象的数组:
defaults: {
attrArray: [
{ item_id: '', type: '', name: '' }
]
},
如果要保存属性对象列表,可以使用数组。但是,如果您有一个属性对象列表,item_id
您希望attrArray['item_id']
引用哪个属性对象?您是否假设attrArray
它将始终初始化为默认值,并且没有人会发送一个attrArray
作为模型初始数据的一部分?如果是这样,你会想要更像这样的东西:
// Use a function so that each instance gets its own array,
// otherwise the default array will be attached to the prototype
// and shared by all instances.
defaults: function() {
return {
attrArray: [
{ item_id: '', type: '', name: '' }
]
};
},
initialize: function() {
// get will return a reference to the array (not a copy!) so
// we can modify it in-place.
this.get('attrArray')[0]['item_id'] = this.cid;
}
请注意,您会遇到一些需要特殊处理的数组属性问题:
get('attrArray')
将返回对模型内部数组的引用,因此修改该返回值将更改模型。
- 诸如此类的事情
a = m.get('attrArray'); a.push({ ... }); m.set('attrArray', a)
不会按照您期望的方式工作,set
不会注意到数组已更改(因为它没有,a == a
毕竟是真的)所以"change"
除非您克隆和之间的某处attrArray
,否则您不会收到事件。get
set