Skip to content
Grigoriev Oleg edited this page Mar 16, 2013 · 4 revisions

go.Carcas: контроллеры

Пример контроллера:

go.Carcas.controller("layouts.main", ["base", "mo:ui.popup"], {

    'nodes': {
        'link': "#auto-link",
        'form': "#auto-form"
    },

    'init': function () {
        this.carcas.mo.ui.popup(this.nodes.link, this.nodes.form);
    }

});

Контроллер отыскивает на странице кнопку "вход" и скрытую форму авторизации и делает так, чтобы форма правильно всплывала и работала. Для навешивания нужного поведения используется модуль ui.popup.

go.Carcas.controller(name, [deps,] props)

Определение контроллера происходит через статический метод go.Carcas.controller() (являющийся алиасом для go.Carcas.getInstance().controller()).

Метод получает следующие аргументы:

name (string) - имя контроллера. В примере, это контроллер слоя: layouts.main. Лежать, соответственно, он должен в файле {root}/controller/layouts.main.js.

deps (mixed) - список зависимостей контроллера. Необязательный аргумент. Формат подробно описан в соответствующем разделе. В примере наш контроллер требует для своей работы модуль ui.popup и контроллер base (например, это базовый контроллер, от которого наследуются все слои). Объект контроллера создаётся только после того, как будут подгружены все зависимости.

props (object) - методы и свойства контроллера. Все контроллеры наследуются от класса go.Carcas.Controller. Поля из props расширяют этот базовый класс.

Методы контроллера

go.Carcas.Controller определяет следующие методы, которые может переопределить каждый конкретный контроллер:

oncreate() - вызывается после создания объекта контроллера. На этот момент загружены все требуемые контроллером зависимости. Остальные модули и контроллеры ещё могут быть не загружены. Также скорее всего не завершена загрузка документа.

init() - вызывается после загрузки DOM. Обычно здесь располагается основная логика. Внешние документы, такие, как картинки и стили на данный момент могут быть ещё не загружены.

onload() - вызывается после полной загрузки документа, включая картинки.

onunload() - вызывается перед закрытием страницы. В этот момент ещё существуют все контроллеры и модулей.

done() - вызывается при разрушении объекта. В этот момент часть других контроллеров и модулей уже может быть разрушено.

Даже если контроллер по каким-то причинам создался после загрузки документа, всё равно все обработчики будут вызваны в указанном порядке.

Свойства контроллера

carcas - центральный объект каркаса. Служит для доступа к модулям, другим контроллерам и реестру.

name - название контроллера.

Получение HTML-элементов

go.Carcas.Controller наследуется от go.Ext.Nodes и наследует его средства получения элементов.

В примере указаны селекторы для нужных контроллеру элементов (кнопки входа и скрытой формы):

'nodes': {
    'link': "#auto-link",
    'form': "#auto-form"
}

В момент вызова init() в них уже вместо селекторов сами элементы (jQuery-объекты). (В момент вызова oncreate() элементы ещё не загружены, так как ещё не догрузился DOM).

Можно указать базовый элемент с помощью свойства node:

go.Carcas.controller("layouts.main", ["base", "mo:ui.popup"], {

    'node': "header",

    'nodes': {
        'link': "#auto-link",
        'form': "#auto-form"
    },
    
    // ...
});

Теперь элементы будут искаться не по всему документу, а внутри <header>.

Clone this wiki locally