我有这个模型默认值:
test.Models.ItemModel = Backbone.Model.extend({
defaults: {
name: 'an item',
units: []
},
Run Code Online (Sandbox Code Playgroud)
然后我使用以下代码来设置模型:
addUnit: function(e){
if(e.keyCode == 13){
this.model.set({ 'units' : this.model.get('units').push($('#addUnit').val()) },
{success: function(){
this.render();
}}
);
}
},
Run Code Online (Sandbox Code Playgroud)
但是,它似乎永远不会被添加到Model数组中,我在这里做事吗?
问题是你假设该push方法返回整个数组; 相反,如此处所述,该push方法
返回
length调用方法的对象的新属性.
因此,在将元素设置为模型之前,需要将元素推入数组:
var _units = this.model.get('units');
_units.push($('#addUnit').val());
this.model.set({ 'units' : _units });
Run Code Online (Sandbox Code Playgroud)
但是要小心,这将修改指向此数组的任何其他内容,因此如果您这样做,例如:
var myArray = [1,2,3]
this.model.set({units: myArray})
var _units = this.model.get('units')
_units.push(4)
this.model.set({ 'units' : _units })
myArray == this.model.get('units') // holy moly, they're the same :(
Run Code Online (Sandbox Code Playgroud)
如果你想避免这种情况,或者仍然想要使用单行代码,你可以使用数组的concat方法:
this.model.set({
'units' : this.model.get('units').concat($('#addUnit').val())
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10549 次 |
| 最近记录: |