Использование requirejs означает отсутствие глобальных переменных?

Означает ли использование requirejs, что я больше не буду иметь дело с глобальными переменными?

Я начинаю внедрять requirejs в свой проект. Прежде чем использовать requirejs, я прикреплял свой пользовательский класс Backbone Router к переменной пространства имен:

app.Router = Backbone.Router.extend({customStuffInHere});

Скажем, теперь я определяю его как «модуль»:

define(['backbone'], function(Backbone) {
    return Backbone.Router.extend({customStuffInHere});
});

С этим проблем нет, так как мой собственный маршрутизатор находится в собственном файле Router.js. Так что следует соглашению один модуль на файл.

Когда я создавал экземпляр этого роутера перед requirejs, я просто делал:

....code....
app.router = new app.Router();
....code....

Теперь мне придется создать совершенно новый файл только для этого экземпляра и включить его в текущий модуль?

Я все делаю правильно?

Изменить: я думаю, мой вопрос заключается в том, как я могу иметь единую модель маршрутизатора для всего моего приложения?


person Community    schedule 27.02.2015    source источник


Ответы (1)


Используйте относительный путь к вашему файлу JS без расширения .js. (Или используйте относительный путь к baseUrl)

По своей природе модули RequireJS являются синглтонами, что означает, что вы получите ссылку на один и тот же объект в любом вызове define или require.

require('./path/to/Router', function () {
  var router = new Router();
}};
person u.k    schedule 27.02.2015
comment
Я попробовал ваше предложение, но кажется, что это не синглтон. Каждый раз создается новый маршрутизатор... - person ; 09.03.2015
comment
Ааа, ничего, ты прав! Я сделал global.js и сохранил все глобальные переменные в этом модуле. Ваше здоровье! - person ; 09.03.2015