«Фреймворк» построенный на принципе MVC (HMVC) с учётом особенностей языка.
- Блекджек и блудницы
- Единая точка входа
- Система роутинга
- jQuery
- jQuery.Class (из JavaScriptMVC)
- History.js
- Require.js
inital release
- Система роутинга (App.Route);
- Pub\Sub интерфейс (App.sub(), App.pub(), App.unsub());
- Рефакторинг (поведение App как модуля, JsLint);
- App.Router bugfixes
- App.Router GET parameters workaround (App.Router.getParams():object, App.Router.getParamsString():string)
- App.js рефакторинг, смена схемы роутинга (модуль-правила на класс-правила);
- Все части App теперь объединены нейспейсом (и одноимённой папкой) app.
- App теперь реализует паттерн синглтон. (См. пример ниже).
- И зависит от Underscore.js.
- App.Route.js переименован в app/Router.js (класс app.Router).
- Pubsub (методы App.sub, App.unsub и App.pub) вынесен из App.js в app/Hub.js (класс app.Hub). Сигнатуры и реализация методов не изменились.
- App.dmesg переименован в Logger.log и, соответственно, перенесён в app/Logger.js (класс app.Logger).
- Добавлен app.Comet
- Добавлен интерфейс для модулей app.IModule
- Добавлен абстрактный класс app.ADeferredModule
- Добавлен app.App.when()
- Изменились правила преобразования имени модуля в имя соответствующего файла (метод app.App._getModuleNameByClass()). Было: Filehost.Module.Gallery -> filehost/module/gallery.js Стало: filehost.module.Gallery -> filehost/module/Gallery.js
- У App-а появилось состояние готовности. Выключается при выполнении метода run(). Включается по факту готовности всех модулей. Модули бывают двух типов — обычные (реализующие интерфейс app.IModule) и «отложенные» (наследующие абстрактный класс app.ADeferredModule). App считает обычный модуль готовым, как только его метод run() возвращает управление. «Отложенные» модули должны сами сообщить о своей готовности: app.Hub.pub("app/module/ready", this.constructor.fullName);
- Убрал зависимость от Underscore.js
- Убита, наконец, зависимость от jQuery.whenReady!
- Новый механизм App.ask/App.answer
- Logger.error -> throw new Error() (Logger.error можно позвать из try-catch в, например, main.js)
Статические методы
- when()
- ask()
- answer()
Методы прототипа
- init()
- run()
- cleanup()
Описание
Ядро.
Следит за изменениями location и запускает модули-контроллеры в соответствии с заданными правилами роутинга.
Статические методы
Методы прототипа
Описание
Роутер.
блаблабла
Статические методы
- pub()
- sub()
- unsub()
Методы прототипа
Отсутствуют.
Описание
Pubsub Hub.
блаблабла
Статические методы
- log()
Методы прототипа
Отсутствуют.
Описание
Обёртка вокруг console.log.
Статические методы
- send()
Методы прототипа
- init()
Описание
Реализует (пока) только long-polling. Реализован (пока) как синглтон.
<script data-main="/js/main" src="/js/require.js"></script>
Пример содержимого:
require(["app/App"], function(App) {
// Правила для роутера вида (Класс (контроллер): массив правил). Правила могут быть строкой или регулярным выражением.
var moduleRoutes = {
"app.module.Common": [/.*/],
"app.module.CategoryList": ["product/category/list"],
"app.module.CategoryEdit": ["product/category/edit"]
};
// Инициализация ядра приложения
var app = new App.getInstance({
routes: moduleRoutes,
baseNamespace: "App"
});
// Первый запуск (последующие сработают автоматически при смене url)
app.run();
});
PUB/SUB