1

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

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

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

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

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

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

4

2 回答 2

4

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

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

于 2012-12-18T22:52:31.663 回答
1

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

var myView = new Backbone.View();

或者通过使用扩展:

var myView = new (Backbone.View.extend({ 
      initialize : function() { console.log('init'); } 
}));
于 2012-12-18T22:53:11.790 回答