jRIApp - новый HTML5 фреймворк для создания интернет бизнес приложенийИсточник: habrahabr MaximTsap
jRIApp - ещё один HTML5 фреймворк, созданный для разработки Web приложений, которые по своей функциональности мало чем уступают desktop приложениям. Основное отличие от уже существующих фреймворков типа angularJS или emberJS, это наличие интегрированного с фреймворком сервиса данных, а также использование MVVM дизайн-архитектуры вместо наиболее распространенного в фреймворках такого типа MVC дизайна. Клиентская часть фреймворка написана на javascript ( сейчас в разработке typescript версия ), а серверная часть на C#. Этот фреймворк опубликован на GitHub под MIT лицензией. Он включает демо-приложение написанное с использованием ASP.NET MVC4 и содержит документацию по его использованию. К примеру, так создается в демо-приложении переключатель страниц:
Шаблоны, также имеют схожий тип создания - в них исключается использование скрипта подобного циклам foreach, которые повторяют вывод кусков разметки в результирующий HTML документ. Эта функциональность в шаблонах прекрасно заменяется, тем, что каждый DOM элемент к свойствам которого осуществляется привязка к данным, на самом деле обертывается при создании привязки видом элемента (element view), который по сути может привязывать любую логику к HTML элементу. Таким образом jQuery плагин привязывает логику к HTML элементу, однако фреймворк делает это в декларативном стиле. Пример небольшого шаблона:
Помимо этого имеются уже готовые пользовательские элементы, интегрированные с компонентами для работы с данными, такие как - DataGrid, DataForm, StackPanel, ComboBox и др. Валидация данных проходит как на клиенте, так и на сервере и использует метаданные задаваемые на серверной стороне. В дополнение, я хотел бы включить в этот топик немного основ для начала работы с Фреймворком.
Базовый класс фреймворка:Чем он так примечателен? Во первых он несет в себе функции observer, т.е. к нему можно присоединять события, на которые подписчики хотят получать уведомления. Он также несет в себе базовую функцию уничтожения объекта, чтобы освободить занятые им ресурсы ( в основном ссылки на другие объекты и события ), и также может уведомить другие объекты о своём уничтожении с помощью события, и ещё может уведомлять подписчиков об ошибках, которые произошли в этом объекте ( как правило клиенты подписываются только на событие error у объектов Global и Application ). Еще одна важная функция присущая данному классу, это то, что он имеет метод, extend , что позволяет наследовать функциональность в производных классах. Пример создания нового класса объекта:
В дальнейшем, класс объекта можно получать из других модулей
Поскольку все классы объектов создаются внутри модулей, то классы объектов можно также экспортировать из них как это делается в классическом определении модулей, т.е. внутри каждого модуля переменная this ссылается на сам модуль и к ней можно прикрепить любые свойства. Например, в одном из модулей, newObjMod, мы экспортируем класс: Изучив основу определения классов в Фреймворке можно перейти к определению привязки к данным, т.е. к объекту, Binding .
Привязка к данным:В принципе, объект, Binding, можно создавать в коде, но более удобно, это, декларативное определение привязки к данным, которое в основном и используется в приложениях ( в документации есть пример создания привязки в коде ). Пример привязки к данным HTML элемента, select :
Атрибут, data-bind определяет выражения привязки к данным. Каждое выражение оборачивается в фигурные скобки и определяет путь к свойству приемника и путь к свойству источника данных. Для выражения можно задать режим - mode , т.е. в каком направлении происходит перемещение данных: OneTime (один раз от источника к приемнику), OneWay (от источника к приемнику), и TwoWay (в обоих направлениях). Режим, OneWay - является режимом по умолчанию и его можно не указывать. Помимо путей к свойствам и режима привязки можно также задать, source . Это свойство привязки не обязательно, так как если его не указывать, то путь для свойства источника будет вычисляться от контекста данных. Если же его указать, то весь путь вычисляется от экземпляра Application. Как правило, пользовательские view models прикрепляются к свойству VM ( это пространство имен прикрепленное к объекту Application ). Поэтому, source=VM.sendListVM , расшифровывается как [Объект Application].VM.sendListVM. Пример инициализации (создания) пользовательских view model:
В случае, если бы мы не задавали, source , в выражении привязки, то свойство пути для источника определялось бы из того, в каком месте задано это выражение. Если, просто, на HTML странице, то весь путь вычисляется также от объекта Application. Также, привязка к данным могут иметь конвертер данных и параметр для конвертера, что помогает изменять данные при прохождении от источника к приемнику и обратно. Например, это удобно для форматирования чисел и дат.
Жизненный цикл привязки:При создании Single Page Applications требуется, чтобы длительное использование приложения не приводило к утечке памяти. Корнем жизни ( т.е. root object хранящий ссылки ) является экземпляр объекта Global, единичный ( Singleton ) экземпляр которого создается при загрузке jriapp.js автоматически. Этот объект хранит ссылки на созданные пользователем на HTML странице объекты Application ( как правило тоже один экземпляр, но можно создать несколько если создавать их в Web Parts ). Объект Application в свою очередь хранит ссылки на созданные им объекты, и так далее. Основой Фреймворка являются привязки к данным - data bindings, и виды элемента - element view ( обертка с логикой прикрепленной к DOM элементу, на подобии jQuery плагина ). Они создаются и удаляются в больших количествах в течении жизненного цикла приложения. В следующем примере, мы указали, что хотим, чтобы привязка создала element view зарегестрированный под именем expander.
Также, для element view может понадобится передать опции для его создания ( element view получит их в своём конструкторе ).
Модульная структура:Фреймворк имеет иерархию модулей.
Итоги:Я думаю, это только малая часть из всего, что имеется в фреймворке для создания приложений. Документация к нему имеет сейчас 80 страниц и описать все его возможности в коротком вводном топике не представляется возможным. Для более детального знакомства с ним понадобится написать несколько таких небольших топиков охватывающих каждый отдельную часть использования фреймворка. Но в первую очередь я предлагаю посмотреть проект на GitHub и посмотреть видео демо-приложения на youtube. Также, прошу учесть, что Фреймворк создавался мной для перевода приложений работающих в SilverLight, и, что это были приложения для работы с данными. Поэтому, дизайн демо приложения простой, в нем показано в основном как работать с данными. Однако, если вы хотите хорошего дизайна, то этот Фреймворк ничего не ограничивает в плане использования стилей и дизайна. Дизайн будет зависеть только от дизайнера. |