我有一个带有require的骨干应用程序,我希望在集合中使用模型内的方法添加集合。 我试图在集合中插入该方法,但我无法添加元素。 当我点击应用程序外部的一个元素时,我想要创建一个应用程序集合,我想在我的应用程序中添加一个集合中的其他应用程序。
这是我的应用: 型号:
define(['backbone', 'collections/element'],function(Backbone, ElementCollection){
var DesignModel = Backbone.Model.extend({
initialize:function(){
console.log('Initialized Design model');
_.defaults(this, {
elements: new ElementCollection()
});
},
addElement: function(elements, options) {
return this.elements.add(elements, options);
}
});
return DesignModel;
});
收集:
define(['backbone', 'models/design'], function(Backbone, DesignModel){
var designCollection = Backbone.Collection.extend({
model: DesignModel,
});
return designCollection;
});
查看
define(['jquery' , 'backbone', 'models/design', 'collections/design', 'views/element'],
function($, Backbone, DesignModel, DesignCollection, ElementView){
var DesignView = Backbone.View.extend({
el:$('#page'),
initialize: function(){
console.log('initialize DesignView');
this.collection = new DesignCollection();
var here = this;
$('#insert-dynamic-element').click(function(){
var element = new ElementView();
here.collection.models.addElement(element);
});
},
render: function(){
}
})
return DesignView;
});
我试图以这种方式调用addElement函数:
here.collection.models.addElement(element);
和
here.collection.addElement(element);
但总是有错误,Object没有方法addElement 我怎么解决这个问题?我想从视图中调用方法addElement,以在集合中的另一个应用程序中添加应用程序。
由于
答案 0 :(得分:1)
嗯,你需要获得一个特定的模型,而不是它们的数组。这似乎是一个错误,因为你将基本上任意选择一个特定的模型(除非你的应用程序具有支持它的语义),但这可行:
here.collection.at(0).addElement(element);
答案 1 :(得分:1)
调用该方法最安全的方法是将方法添加到集合而不是模型。目前,该方法可在Model实例上使用。
所以this.collection.models.addElement
不会削减它
收藏
define(['backbone', 'models/design'], function(Backbone, DesignModel){
var designCollection = Backbone.Collection.extend({
model: DesignModel,
addElement: function(elements, options) {
return this.add(elements, options);
}
});
return designCollection;
});
查看强>
define(['jquery' , 'backbone', 'models/design', 'collections/design', 'views/element'],
function($, Backbone, DesignModel, DesignCollection, ElementView){
var DesignView = Backbone.View.extend({
el:$('#page'),
initialize: function(){
console.log('initialize DesignView');
this.collection = new DesignCollection();
var here = this;
$('#insert-dynamic-element').click(function(){
var element = new ElementView();
here.collection.addElement(element);
});
},
render: function(){
}
})
return DesignView;
});
如果您不想从当前模型移动方法。然后,您可能必须使用索引
调用特定模型here.collection.at(0).addElement(element);
但是可能存在集合中没有模型的情况,这可能会导致错误情况。
here.collection.at(0) && here.collection.at(0).addElement(element);