-
Notifications
You must be signed in to change notification settings - Fork 1
Carcas carcas
Центральный объект служит для загрузки модулей и контроллеров, а также обеспечения их взаимодействия.
Объект является экземпляром класса go.Carcas
.
Центральный объект можно получить с помощью go.Carcas.getInstance()
.
Впрочем, внутри контроллеров и модулей он доступен изнутри.
Следует использовать имеющуюся у них ссылку, а не доставать его через getInstance()
.
Для подробностей см. разделы модули и контроллеры.
Некоторые статические методы класса go.Carcas
являются алиасом к одноимённым методам центрального объекта.
Это init()
, controller()
и module()
.
Например, go.Carcas.init()
на самом деле вызывает go.Carcas.getInstance().init()
.
Модули и контроллеры могут получить доступ к другим модулям и контроллерам через поля объекта carcas
.
В поле controllersList
лежат подгруженные на данным момент контроллеры.
В поле modulesList
- модули.
Так, как к модулям идёт частое обращение, для modulesList
существует более короткий вариант - mo
.
Пример обращения из контроллера к функции func
модуля package.module
:
this.carcas.mo.package.module.func();
// или так
var module = this.carcas.mo.package.module;
module.func1();
module.func2();
module.func3();
Доступ к другому контроллеру:
this.carcas.controllersList.layouts.main.method();
Впрочем, обращаться к контроллерам обычно не требуется.
Ещё одно полезное поле - registry.
Центральный объект можно заменить с помощью статического метода go.Carcas.setInstance()
.
Например, в нашей системе есть какой-то глобальный сервис. Допустим, можно посылать ajax-запросы определённого вида. Внедрим эту возможность прямо в центральный объект:
var MySystemCarcas = go.Class(go.Carcas, {
/**
* Отправить запрос на action с данными data.
* После успешного выполнения запроса вызвать handler с результатами.
*/
'ajax': function (action, data, handler) {
// ...
}
});
go.Carcas.setInstance(new MySystemCarcas());
Теперь внутри контроллеров и модулей доступна эта возможность:
this.carcas.ajax("action");
Это же можно сделать менее многословно, хоть не так теоретически правильно:
var carcas = new go.Carcas();
carcas.ajax = function (action, data, handler) {
// ...
};
go.Carcas.setInstance(carcas);
Либо так:
go.Carcas.getInstance().ajax = function () {/* ... */};
но это уже моветон.
setInstance()
можно вызвать, только если объект ещё не создан.
Если уже вызывалось getInstance()
(например, через go.Carcas.init()
), то выбрасывается исключение go.Carcas.Exceptions.MainInstanceCreated
.