我目前正在使用backbone.js,并试图在模型和集合之间创建一些关系时遇到了一些奇怪的行为。
所以这是我的模特/收藏
Element = Backbone.Model.extend({
name: 'element'
});
Elements = Backbone.Collection.extend({
name: 'elements',
model: Element
});
Application = Backbone.Model.extend({
name: 'app',
initialize: function() {
this.elements = new Elements(this.get('elements'));
}
});
当我通过application.get('elements')
检索元素时,我会收到一个“false
”,询问此新对象是否是Backbone.Collection
的实例。
var gotElements = application.get('elements');
var isCollection = gotElements instanceof Backbone.Collection;
我做错了什么,或者我是否必须创建一个新的Collection-Instance并用我从应用程序收到的Collection填充它?
答案 0 :(得分:4)
在初始化函数中,执行this.elements会直接在模型上设置一个名为“elements”的属性(因此model.elements将是您的Backbone集合)。问题是当你尝试通过调用application.get('elements')来检索this.elements时,你会看到它返回undefined(这就是为什么它不是Backbone集合的实例)。
为了使用model.get可以检索模型属性,需要使用model.set(attribute)进行设置。如果您在控制台中检查模型,您将看到差异。 model.set(myData)将您的数据添加到模型的属性哈希中。 model.myData = myData直接向模型添加'myData'属性。
要实现此目的,您可以执行以下操作:
Element = Backbone.Model.extend({
name: 'element'
});
Elements = Backbone.Collection.extend({
name: 'elements',
model: Element
});
Application = Backbone.Model.extend({
name: 'app',
elements: null
});
var application = new Application({
elements: new Elements()
});
var myElements = application.get('elements');
myElements现在应该是一个空的Backbone Collection
答案 1 :(得分:0)
您应该将其放入相应的视图中,而不是将您的集合放入另一个模型中:
var ListView = new Backbone.View.extend({
initialize:function(){
this.Elements= new Elements();
// more stuff to go
},
render:function(){
_.forEach(this.Elements, function(){
//Do rendering stuff of indivdual elements and get HTML
});
//put HTML in the DOM
}
});
不需要包含包含多个模型的集合的模型。
编辑:而不是将您的应用程序放入模型中,您应该将其放入视图中。