Skip to content
Grigoriev Oleg edited this page Mar 7, 2013 · 2 revisions

go.Carcas: центральный объект carcas

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

Объект является экземпляром класса go.Carcas.

Доступ к 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

Ещё одно полезное поле - 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.

Clone this wiki locally