【问题标题】:Is backbone.js model's view instance render function static?主干.js 模型的视图实例渲染函数是静态的吗?
【发布时间】:2011-12-31 11:47:00
【问题描述】:

这是一个关于backbone.js和javascript的一般问题,我是javascript中级:

如果你有一个模型集合,每个模型都连接到一个视图的实例,每个模型实例的视图实例是否包含视图渲染方法的完整实例?如果是这样,有什么推荐的方法来确保渲染方法是“静态的”,这样如果每个模型实例都需要完全相同的渲染函数,就不会浪费内存?

在下面的示例中,每个帽子实例是否还包含渲染函数的实例,还是指向“静态”渲染函数?

    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 });

    });

【问题讨论】:

    标签: javascript backbone.js


    【解决方案1】:

    Javascript 中没有真正的“静态”或“类”方法。您所拥有的是在类的原型上定义的方法。

    当您使用 Backbone.View.extend() 时,您传递的所有内容都会添加到原型中,因此它们确实是您所说的“静态”方法。

    【讨论】:

      【解决方案2】:

      只要检查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
      
      }());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 2013-12-18
        • 1970-01-01
        • 2014-09-18
        相关资源
        最近更新 更多