backbone.js模型的视图实例渲染函数是静态的吗?

时间:2011-11-17 15:51:23

标签: javascript backbone.js

这是关于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 });

    });

2 个答案:

答案 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

}());