【问题标题】:Self initialize a backbone view自初始化主干视图
【发布时间】:2012-12-18 22:31:54
【问题描述】:

我想知道是否有一种简单的方法可以自行初始化主干视图。最好我展示一个我想要做的例子。

目前初始化主干视图的默认方式如下:

var BBview = Backbone.View.extend({});
var myView = new BBview();

出于名称间距的原因,我想“自动”或“自我”初始化主干视图。例如。

var MyApp.MyView = Backbone.View.extend({}).initialize();

这样 MyApp.MyView 将自动成为我的视图,而不必先创建一个变量作为主干视图,然后再创建另一个变量来初始化它。希望这是有道理的。任何帮助深表感谢。多谢你们。

【问题讨论】:

    标签: javascript backbone.js


    【解决方案1】:

    Backbone.View.extend() 返回一个构造函数,因此您可以在其上调用new。唯一棘手的部分是让优先级正确,以便 extend 看到括号中的参数,而不是 new 看到它们作为构造函数的参数:

    var v = new (Backbone.View.extend({ ... }));
    

    演示:http://jsfiddle.net/ambiguous/TpmtH/

    没有多余的括号:

    var v = new Backbone.View.extend({ ... });
    

    你会(或多或少)这样做:

    var V = Backbone.View.extend;
    var v = new V({ ... });
    

    这不是你想要的。

    我不会推荐这种事情,你只会让任何最终在六个月内查看你的代码的人感到困惑和困惑。你最好使用一个函数来避免命名空间污染:

    var myView = (function() {
        var BBview = Backbone.View.extend({});
        return new BBview();
    })();
    

    这可能不那么漂亮或聪明,但它具有作为一种常见且可立即识别的模式的巨大优势。

    【讨论】:

      【解决方案2】:

      直接用new操作符初始化主干视图:

      var myView = new Backbone.View();
      

      或者通过使用扩展:

      var myView = new (Backbone.View.extend({ 
            initialize : function() { console.log('init'); } 
      }));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-19
        • 1970-01-01
        • 1970-01-01
        • 2012-11-13
        • 1970-01-01
        • 1970-01-01
        • 2014-05-23
        • 1970-01-01
        相关资源
        最近更新 更多