-
Notifications
You must be signed in to change notification settings - Fork 1
Carcas modules
Пример модуля:
go.Carcas.module("admin.ui.List", null, function (carcas) {
return go.Class(go.Ext.Nodes, {
'nodes': {
'header' : "tr.head",
'lines' : "tr.line",
'footer' : "tr.footer"
},
'__construct': function (node) {
this.initNodes(node);
this.initEvents();
},
'initEvents': function () {
// ...
}
});
});
В админке сайта есть некие списки объектов. У всех у них есть стандартное поведение (например, можно сортировать строчки, фильтровать). Это поведение описывается этим модулем.
Определение модуля происходит через статический метод go.Carcas.module()
(являющийся алиасом для go.Carcas.getInstance().module()
).
Метод получает следующие аргументы:
name
- имя модуля. В примере, это admin.ui.List
, соответственно, лежать модуль должен в файле {root}/modules/admin/ui/List.js
.
deps
(mixed) - список зависимостей модуля. Необязательный аргумент. Формат подробно описан в соответствующем разделе. В примере указано null
- модуль ничего не требует для своей работы.
CModule
- функция-конструктор модуля. См. ниже.
Объект модуля создаётся путём вызова конструктора CModule
.
Создание модуля происходит после того, как будут подгружены все зависимости.
Что вернёт функция-конструктор, то и будет считаться модулем.
В примере модуль создаётся в виде класса. Можно создать объект-namespace с набором функций. Или просто функцию. На что хватит фантазии.
Единственным аргументом конструктор модуля получает центральный объект каркаса.
С его помощью можно обращаться к другим модулям и реестру.
Модули желательно разрабатывать обобщённо. Модуль в примере не должен знать, сколько списков на странице и где они расположены. Он должен работать с данными, полученными от контроллеров и других модулей.
Пример контроллера, использующего вышеприведённый модуль:
go.Carcas.controller("layouts.admin", ["mo:admin.ui.List"], {
'nodes': {
'lists': ".admin-list"
// ...
},
'init': function () {
this.initLists();
// ...
},
'initLists': function () {
var nodes = this.nodes.lists,
len = nodes.length,
i,
node,
lists = [],
ListClass = this.carcas.mo.admin.ui.List,
list;
for (i = 0; i < len; i += 1) {
node = nodes.eq(i);
list = new ListClass(node);
lists.push(list);
}
this.lists = lists;
},
// ...
});
Контроллер административного слоя среди прочих своих занятий извлекает со страницы все списки (таблицы с классом "admin-list") и для каждого создаёт объект класса определённого в модуле.
На всякий случай список этих объектов сохраняется в this.lists
.
Код модуля занимается отдельным списком и не задумывается о том, сколько этих списков на странице.