我已初始化Backbone Collection但在集合上调用调用不起作用。出于某种原因,我得到了JS错误:
var vw = new SomeView(); // A view with function 'refresh'
var col = new Backbone.Collection();
col.add(vw);
...
setTimeout(function(){ col.invoke('refresh'); }, 1000); // Error: Cannot call method 'apply' of undefined
但是,调用 isEmpty 之类的方法可以正常工作
console.log("Is empty? ", col.isEmpty()); // prints: 'Is Empty? false'
似乎我错过了一些非常明显的东西。
注意:我没有兴趣调用每个函数,然后在视图对象上调用刷新,因为那只是笨重。
答案 0 :(得分:3)
骨干中的集合是模型列表。因此,当您在内部向集合添加视图时,它将调用此类col.add(Backbone.Model.extend(vw))
之类的内容。因此,它将创建一个新的模型,您的视图作为构造函数参数。如果您想将视图存储在列表中,只需使用JavaScript数组或更智能的下划线集合
答案 1 :(得分:0)
您尝试通过实例化集合本身来创建集合, 你首先必须从它扩展并告诉它它持有什么型号 而我在上面看到的是你试图把你的观点放在一个集合中? 这是不可能直接的,因为集合包含模型列表,而不是视图。 但是,您可以创建一个定义视图的模型。
var myView = Backbone.View.extend({});
var myModel = Backbone.Model.extend({});
var myCollection = Backbone.Collection.extend({ model: myModel });
$(function(){
// creating your view
var vw = new SomeView();
// creating a model for the view
var viewModel = new myModel({ linkedview : vw });
// creating a collection
var modelList = new myCollection();
modelList.add(viewModel);
});
它的要点是,你创建一个模型,包含对你的视图的引用,而不是直接将视图添加到集合中(这将无法工作)