Как использовать backbone.js с пространствами имен? - PullRequest
2 голосов
/ 12 апреля 2011

Я пытался заставить пространства имен работать с backbone.js в течение последнего часа или около того.

Я прочитал: Как мне объявить пространство имен в JavaScript?

И я попробовал все подходы.Вот проблема:

Backbone.Controller хочет инициализироваться через constructur («новое ключевое слово»), потому что иначе Backbone.history не будет установлен.Это код, который я пытаюсь поместить в пространство имен, например «Site.Controllers»

var MainController = Backbone.Controller.extend({

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

   help: function(){}
});

var ws =  new MainController

Всякий раз, когда я пытаюсь поместить MainController в некоторое пространство имен, backbone.js жалуется, что MainController не являетсяконструктор - конечно, это так, потому что, кажется, нет никакого способа сделать пространство имен "деревом" с помощью функций конструктора.Если вы, ребята, хотите, я могу перечислить все подходы, которые я пробовал, но это точно так же, как по ссылке, приведенной выше.Я не пытался поместить это в замыкания, потому что это предлагается очень медленно.

1 Ответ

1 голос
/ 12 апреля 2011
var namespace = {
    MainController: Backbone.Controller.extend({ ... }),
    HelpController: Backbone.Controller.extend({ ... }),
    ...
};

Я не понимаю, чего вы пытаетесь достичь. Практически стойкий метод создания пространства имен:

var namespace = (function() {
    ...

    return {
        ...
    };

})();

Также да, закрытия действительно медленнее. Но я не буду беспокоиться об этом, если вы не создадите замыкания миллионы раз.

...