2

在过去的一个小时左右,我一直在尝试让命名空间与backbone.js 一起使用。

我已阅读:如何在 JavaScript 中声明命名空间?

我尝试了所有方法。这是问题所在:

Backbone.Controller 希望通过构造函数(“新关键字”)进行初始化,否则将不会设置 Backbone.history。这是我试图放入命名空间的代码,例如“Site.Controllers”

var MainController = Backbone.Controller.extend({

   routes: {
       "help":                 "help",    // #help
   },

   help: function(){}
});

var ws =  new MainController

每当我尝试将 MainController 放入某个命名空间时,backbone.js 都会抱怨 MainController 不是构造函数——当然是这样,因为似乎没有任何方法可以使用构造函数创建命名空间“树”。如果你们愿意,我可以列出我尝试过的所有方法,但它与上面提供的链接完全相同。我没有尝试将其放入闭包中,因为建议这样做很慢。

4

1 回答 1

1
var namespace = {
    MainController: Backbone.Controller.extend({ ... }),
    HelpController: Backbone.Controller.extend({ ... }),
    ...
};

我对你想要达到的目标感到困惑。创建命名空间的一种几乎不会失败的方法是:

var namespace = (function() {
    ...

    return {
        ...
    };

})();

是的,关闭确实更慢。但是我不会担心这个,除非你创建了数百万次的闭包。

于 2011-04-11T22:00:58.943 回答