-
Notifications
You must be signed in to change notification settings - Fork 1
Carcas controllers
Пример контроллера:
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()
(являющийся алиасом для 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
- название контроллера.
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>
.