- PVSM.RU - https://www.pvsm.ru -

Jii 0.8: Миграции, ReactViews, изоморфное приложение и прочие плюшки

Привет всем жителям и гостям хабра и с новым годом! :)
В этой статье я хочу рассказать о том, с какими фичами Jii вступил в 2016-й год и что его в ждет в новом году.

Jii 0.8: Миграции, ReactViews, изоморфное приложение и прочие плюшки - 1

Итак, начнем по порядку.

Console Application

Консольное приложение обновилось, теперь оно поддерживает методы prompt, select, confirm и подобные из хелпера Console (yiihelpersBaseConsole). Если приложение инициализируется через jii-workers (статья на хабре [1]), то консольное приложение запустится при добавлении роута в качестве аргумента:

jii migrate/create

Таким образом, файл jii (пример [2]) становится входной точной как для консольного приложения, так и для веб.
Консольное приложение имеет ключ «console», для его конфигурации нужно передать объект конфигурации с ключом console в метод application():

require('jii-workers')
    .application('console', Jii.mergeConfigs( // Конфигурация консольного приложения
        require('./app/config/main'),
        require('./app/config/server/console')
    ))
    .application(Jii.mergeConfigs( // Конфигурация веб-приложения
        require('./app/config/main'),
        require('./app/config/server/web')
    ))

Если опустить аргументы, то запуститься веб-приложение. Запустите jii help для просмотра доступных консольных команд.

Миграции

В версии 0.8 появились миграции, портированные из Yii2. Весь функционал и АПИ сохранен, единственное чего не хватает — так это тестов. Если нашли баг — то сделайте pull request с исправлением или создайте тикет [3].

Загрузчик классов

Теперь Jii знает о всех своих классах в любом из пакетов (автосгенерированный список [4]), а это значит, что при подключении Jii, не нужно через require(..) подключать все пакеты, достаточно подключить только jii:

// Было:
global.Jii = require('jii');
require('jii-model');
require('jii-ar-sql');
require('jii-httpserver');
require('jii-comet');

// Стало
global.Jii = require('jii');

И если вы забыли установить какой-то из пакетов, в консоле вы увидите понятную ошибку, указывающее на это.

Backbone-style модели и коллекции

В Jii появились коллекции и модели, API которых похож и во многом повторяет API Backbone (причем API Yii2 моделей сохранено). Помимо этого, в моделях и коллекциях добавились события, поддерживающие вложенность. Т.е. если у модели есть связи, то можно подписаться на изменения связанной модели, даже если она еще не подгружена. Аналогично поумнели геттеры и сеттеры.
Вот небольшой список поддерживаемых форматов получения/добавления/изменения значений и подписываний на события:

Collection formats:
coll.add({id: ..})
coll.push({id: ..}, {id: ..})
coll.add([{id: ..}])
coll.set({id: ..})
coll.set('[0].name', '..')
coll.at(-1).get('name')
coll.on('add remove change', function (){})
coll.on('change:title', function (){})
coll.on('change:user.name', function (){})

Model formats:
model.set('name', '..')
model.set('foo.bar', '..')
model.set('foo[0].bar', '..')
model.get('foo.bar.zz.rr[0].qwe')
model.get('foo[0].bar')
model.on('change', function (){})
model.on('change:foo', function (){})
model.on('change:foo.bar.qwe', function (){})
model.on('change:foo.bar[0].qwe', function (){})

К сожалению, документации пока еще нет, но можно посмотреть тесты коллекций [5] и моделей [6].

ReactJS

Изначально я планировал не делать жесткой привязки к вьюшкам, хотелось, чтобы любая клиентская или серверная библиотека, отвечающая за букву «V» из «MVC» работала с Jii без сложных плясок с бубном. Как прояснилось позже — сочетать большие фреймворки типа angularjs, sencha — очень сложно из-за наличия в них своих моделей.
Начались поиски вьюшек для Jii: они должны были быть современными, с биндингами данных, не привязанными к структуре приложения, желательно изоморфными. Реактивные вьюшки от фейсбука идеально ложатся в эти критерии, поэтому к underscore шаблонам добавилась альтернатива — ReactJS.

Изоморфное приложение

ReactJS изначально создан быть изоморфным, контроллеры в Jii были изоморфными и ранее, модели и коллекции прокачались. Также появились такие компоненты как Neat, ContextProfiles, RemoteConnection и т.п., которые позволяют сделать код изоморфным. Все это еще находится в альфе, поэтому множества примеров, тестов, стабильности и документации сейчас нет. Но есть boilerplate [7], показывающий возможности новых фич.

Клиент-сервер биндинги

Биндиги реализованы через библиотеку NeatComet [8], которую разработал коллега из нашей компании (ExtPoint [9]). Она уже используется в некоторых проектах, но пока не готова к массовой публикации. В случаи с Jii — это не важно, т.к. Jii имеет собственное API поверх NeatComet.

2016

Все эти вышеперечисленные и другие фичи будут развиваться в 2016-ом году. Планов много, идей еще больше, но времени как обычно мало.
Напомню, Jii — опенсорсный проект, поэтому я буду очень рад, если кто-то присоединится к его разработке. Пишите на affka@affka.ru и заглядывайте в раздел разработки.

Сайт фреймворка — jiiframework.ru [10]
GitHub — github.com/jiisoft [11]

Нравится идея фреймворка? Ставь звезду [12] на гитхабе [13]!

Автор: affka

Источник [19]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/javascript/108018

Ссылки в тексте:

[1] статья на хабре: http://habrahabr.ru/post/266929/

[2] пример: https://github.com/jiisoft/jii-boilerplate-basic/blob/master/jii.js

[3] создайте тикет: https://github.com/jiisoft/jii-console/issues/new

[4] автосгенерированный список: https://github.com/jiisoft/jii/blob/master/classes.json

[5] коллекций: https://github.com/jiisoft/jii-model/blob/master/tests/unit/CollectionTest.js

[6] моделей: https://github.com/jiisoft/jii-model/blob/master/tests/unit/ModelTest.js

[7] boilerplate: https://github.com/jiisoft/jii-boilerplate-basic

[8] NeatComet: https://github.com/ExtPoint/NeatComet

[9] ExtPoint: http://extpoint.com

[10] jiiframework.ru: http://www.jiiframework.ru/

[11] github.com/jiisoft: https://github.com/jiisoft

[12] звезду: https://github.com/jiisoft/jii/stargazers

[13] гитхабе: https://github.com/jiisoft/jii

[14] Jii: Масштабируемый комет сервер и клиент: http://habrahabr.ru/post/268817/

[15] Jii: Полноценное приложение с архитектурой Yii2 в браузере: http://habrahabr.ru/post/268361/

[16] Jii — JavaScript фреймворк с архитектурой от Yii 2: http://habrahabr.ru/post/260931/

[17] Jii: Active Record для Node.js с API от Yii 2: http://habrahabr.ru/post/260569/

[18] Jii: Полноценный Query Builder для Node.js с API от Yii 2: http://habrahabr.ru/post/260295/

[19] Источник: http://habrahabr.ru/post/274419/