这是关于backbone.js和javascript的一般性问题,我是javascript的中间人:
如果你有一个模型集合,每个模型连接到一个视图的实例,每个模型实例的视图实例是否包含视图的渲染方法的完整实例?如果是这样,建议的方法是什么,以确保渲染方法是“静态的”,以便如果每个模型实例需要完全相同的渲染函数,不浪费内存?
在下面的示例中,每个hat实例是否也包含render函数的实例,还是指向'静态'渲染函数?
var Hat = Backbone.Model.extend({});
var HatCollection = Backbone.Collection.extend({
model : Hat,
});
var HatView = Backbone.View.extend({
render : function() {
// output the hat's html
}
});
var hats = new HatCollection([ new Hat(), new Hat(), new Hat()])
hats.each(function(hat) {
hat.view = new HatView({ model : hat });
});
答案 0 :(得分:2)
Javascript中没有真正的“静态”或“类”方法。你拥有的是在类的原型上定义的方法。
当您使用Backbone.View.extend()时,您传递的所有内容都会添加到原型中,因此它们确实是您所谓的“静态”方法。
答案 1 :(得分:1)
只需检查render
方法是否是实例或原型的成员:
(function () {
var HatView = Backbone.View.extend({
render : function() {
console.log("rendering a hat...");
}
});
var hview = new HatView();
console.log(hview.hasOwnProperty("render")); // false
console.log(hview.render === HatView.prototype.render); // true
}());