2017-02-14 3 views
0

Я хотел бы установить переменную или объект в main.js, который затем я могу ссылаться на любой основной режим.Как передать глобальную переменную/объект с RequireJS

Я рассматривал использование localStorage, но данные динамичны и немного чувствительны, поэтому я не хотел бы, чтобы он хранился в localStorage, так как его легко манипулировать пользователем.

ответ

1

Поскольку вы сказали «main.js», я думаю, вы смущены между RequireJS и Backbone.js. RequireJS не является частью магистрали. Это загрузчик модулей AMD, который часто используется с базовыми проектами.

Похоже, вам нужен модуль RequireJS как:

define(function (require) { 
    var someData; 
    var singleton = function() { 
    return { 
     getMyData = function(){}, 
     setMyData = function(data){}, 
    }; 
    }; 
    return singleton(); 
}); 

P.S: Над кодом может быть литерал объекта, экземпляр правильной функции конструктора, ES6 класс любой другой. Я только что опубликовал что-то в качестве примера.

+0

Возможно немного смущенный. Я использую requireJS с моим backbonejs-приложением. Мне нужно каким-то образом зарегистрировать переменную или объект в моем main.js, который затем я могу ссылаться на представление backbonejs, которое является отдельным js-файлом (до r.js). – David

+0

Вы можете потребовать свой модуль singleton в своем main.js и установить для него любое значение. Затем вы можете получить значение, потребовав его/добавив этот модуль в качестве зависимости в модуле просмотра основной линии. В других работах сохраняйте свои данные в модуле requirejs –

0

@TJ already gave what's needed для достижения того, что я называю Сервис в моем приложении, заимствованном у AngularJS services. У меня есть пара услуг, таких как i18n, который является только экземпляром i18next.

Как и вы, я хотел управлять определенными данными относительно приложения, которое можно было бы разделить везде, не помещая его в объект window.

Я придумал услугу AppState, которая является экземпляром модели Backbone.

define(['underscore', 'backbone', 'color'], function(_, Backbone, Color) { 

    var State = Backbone.Model.extend({ 

     setBrandColor: function(hexColor, options) { 
      return this.set({ color: new Color(hexColor) }, options); 
     }, 

     getBrandColor: function() { 
      return this.get('color'); 
     }, 
    }); 

    return new State(); // return a new instance instead of the constructor. 
}); 

Что круто с моделью магистральной системы является то, что что-либо в приложении может прослушивать его события. Это вдохновлено React.

this.listenTo(AppState, 'change:color', this.onBrandColorChange); 

Обратите внимание, что я предпочитаю использовать PascalCase услуг, даже если они экземпляры, они тесно связаны со статическим типом на других языках.

Таким образом, когда изменяется состояние приложения, другие части приложения может или не может реагировать соответствующим образом. Без событий приложение должно быть более связным, что нежелательно.

Смежные вопросы