Технология BrickJSEngine
BrickJSEngine - это технология построения полноценных элементов управления пользовательского интерфейса на базе JavaScript. Выражение «Полноценных элементов управления» здесь приведено не случайно. Оно заключается в том, что благодаря этой технологии, интерфейс пользователя действительно становиться гибким и сравним по мощности с интерфейсом локальных программ и их оконным интерфейсом. А главное, полноценное интернет-приложение может работать в браузере клиента без использование дополнительных фреймворков (java и т.п.). Для работы приложения нужен только браузер и его JavaScript.
Принцип работы BrickJSEngine
1. Клиент: Интернет-браузер запрашивает страницу сайта, которое будет использовать
технологию построения интернет-приложений BrickJSEngine.
Сервер: Ядро платформы собирает информацию о всех имеющихся в ней модулей и их JS-компонентах
и включает эту информацию в JS-файл ядра фреймворка BrickJSEngine. При этом платформа кеширует
этот скомпилированный JS-скрипт и при последующем запросе отдает его уже из кеша.
2. Клиент: Интернет-браузер запрашивает приложение модуля. Фреймворк BrickJSEngine делает
запрос на динамическую загрузку определенного JS-компонента.
Сервер: Ядро платформы компилирует исходный код JS-компонента в один JS-файл и отдает клиенту.
Если для работы этого JS-компонента необходимы другие JS-компоненты и они указаны в его заголовках, то при
получении клиентом этого JS-компонента, BrickJSEngine производит динамическую подгрузку оставшихся
JS-компонентов. Это происходит до дех пор, пока не будут подгружены все необходимые JS-комопненты.
После получения клиентом всех необходимых JS-компонентов, BrickJSEngine выполняет
JavaScript-код стартого JS-компонента, который при необходимости использует библиотеку
запрошенных JS-компонентов.
Таким образом, в процессе выполнения интернет-приложения на платформе Абрикос, все необходимые
библиотеки, их функции, подгружаются динамически. Важно заметить тот факт, что все
загруженные JS-компоненты складываются в кеш интернет-браузера и при повторном запросе берутся
из этого кеша.
Структура JS-компонента
JS-компонент в платформе Абрикос не может быть отдельной сущностью, а принадлежит определенному модулю. Все JS-компоненты находяться в папке js определенного модуля.
[корневая папка платформы]/
modules/
[имя_модуля]
js/
langs/
[имя_js_компонента]_ru.js - набор фраз русского языка
[имя_js_компонента]_en.js - набор фраз английского языка
[имя_js_компонента].js - основной JS-файл компонента
[имя_js_компонента].htm - HTML-шаблон JS-компонента
[имя_js_компонента].css - CSS-стиль JS-компонента
Основной JS-файл компонента
Этот файл является главным в JS-компоненте и содержит в себе исполняемый JavaScript-код.
// создать экземпляр компонента
var Component = new Brick.Component();
// Описание зависимостей этого JS-компонента от других JS-компонентов и прочих JS-библиотек
Component.requires = {
// запросить библиотеки [libname1],...,[libnameN] JS-фреймворка YUI
yahoo: ['[libname1]',...,'[libnameN'],
// запросить JS-компоненты из других модулей платформы
mod:[
{name: '[модуль1]', files: ['[js_комп1].js',...,'[js_компN].js']},
...
{name: '[модульN]', files: ['[js_комп1].js',...,'[js_компN].js']},
// запросить JS-компоненты этого модуля
{name: '{C#MODNAME}', files: ['[js_комп1].js',...,'[js_компN].js']}
]
};
// Точка входа JS-компонента
Component.entryPoint = function(NS){
// этот JS-код будет выполнен после динамической загрузки всех
// зависимых JS-компонентов и прочих JS-библиотек
...
};
HTML-шаблон JS-компонента
Этот файл содержит HTML-шаблон JS-компонента. Не является обязательным. Используется для построения интерфейса.
<!--{[id_шаблона1]}-->
<div id="{i#id}" class="aw-mymodule-class">
...
</div>
...
<!--{[id_шаблонаN]}-->
<div id="{i#id}" class="aw-mymodule-class">
...
</div>
где, [id_шаблона1],...,[id_шаблонаN] - идентификаторы HTML-шаблонов
CSS-стиль JS-компонента
CSS-стиль JS-компоненат, который будет применен в процессе выполнения JS-компонента. Не является обязательным. Используется для построения интерфейса.
.aw-mymodule-class {
...
}
...
Локализация JS-компонента
Набор фраз определенного языка. При компиляции используется файл языка указанного в настройках платформы. Для автоматизации процесса локализации разработан специализированный модуль Localize. Не является обязательным. Используется для построения интерфейса.
Brick.util.Language.add('[lang_id]',{'mod': {'{C#MODNAME}':{
'[phrase1]': '[Значение фразы языка lang_id]',
...,
'[praseN]': '[Значение фразы языка lang_id]'
}}});