【发布时间】:2011-09-15 18:34:59
【问题描述】:
使用backbone.js,这里有一个快速测试来演示我在使用嵌套模型时遇到的问题。
前言 我有一个包含 2 个嵌套模型 Obj1 和 Obj2 的 Obj 模型。 Obj模型本身有一个View(ObjView),主页面本身也有一个View(BodyView)。
主页有一个按钮,id=add。每次单击按钮时,ObjCollection 中都会添加一个新的 Obj,ObjView 会在页面中添加一个按钮(id=clickMe)。 clickMe 按钮绑定到控制台记录 this.model 和 this.model.get("obj1") 的 testFunc。
问题 通过检查 console.logs,我看到虽然每个 Obj 都是一个新实例,但它们嵌套的 Obj1 指向同一个 obj1 实例!但是 Obj 的每个实例显然应该有自己的嵌套模型 obj1 和 obj2 的实例。
任何帮助表示赞赏。
$(document).ready(function(){
var Obj1 = Backbone.Model.extend({
defaults:{
Attr1A : false,
Attr1B : false
}
})
var Obj2 = Backbone.Model.extend({
defaults:{
Attr2A : false,
Attr2B : false
}
})
var Obj = Backbone.Model.extend({
defaults: {
obj1 : new Obj1(),
obj2 : new Obj2()
}
})
var ObjCollection = Backbone.Collection.extend({
model: Obj
});
var ObjView = Backbone.View.extend({
initialize: function(){
_.bindAll(this, 'render', 'testFunc');
this.model.bind('change', this.render);
this.model.view = this;
$("body").append(this.render().el);
},
events: {
"click #clickMe" : "testFunc"
},
render: function(){
$(this.el).html('<input type ="button" id="clickMe" value="Click">')
return this;
},
testFunc: function(){
console.log(this.model); //returns Obj models with unique cids
console.log(this.model.get("obj1")); //returns Obj1 models with the SAME cid!
}
});
var BodyView = Backbone.View.extend({
el: $('body'),
events:{
"click #add" : "addObj"
},
initialize: function(){
_.bindAll(this, 'render', 'addObj')
this.collection = new ObjCollection();
this.collection.bind('add', this.appendObj);
},
addObj: function(){
var myObj = new Obj();
this.collection.add(myObj);
},
appendObj: function(myObj){
var objView = new ObjView({
model: myObj
});
}
});
var bodyView = new BodyView;
});
html 页面就是以下加载了 jQuery 和主干的页面。
<body>
<input type ="button" id="add" value="Add">
</body>
【问题讨论】:
标签: javascript model-view-controller backbone.js