jQuery.my 1.1.0
Jan. 12th, 2015 02:57 amЗа каникулы случился minor version upgrade – добавилось немножко вкусных фич. Заодно оказалось, что это 10-й юбилейный релиз, да.
В jQuery.my теперь есть внутрисистемный pub/sub и управляемое наследование.
Radio/ listen
Pub/sub организован по принципу радио – каналы и подписчики. Подписчики – контролы в приложениях, они могут апдейтиться на сообщение в канале.
В отличие от типичных чисто js-реализаций pub/sub, я заюзал DOM. Просто мне надо иногда ограничивать вещание, примерно вот так:
То-есть какие-то каналы броадкастятся всем, а какие-то приложение может ограничивать и наружу не выпускать. А какие-то и вовсе просто глушить.
С учётом того, что $.my это loosely coupled система, такую функциональность – что по границам каждого приложения может проходить radio-relay c ретранслятором/обработчиком/глушилкой – оказалось не так просто сделать по канонам.
Любое $.my приложение может позаимствовать у соседа, например, какую-то всплывайку, чуток её декорировать и использовать как свою. Или даже не декорировать. И этот позаимствованный манифест должен вести себя, как родной, в том числе и в плане цензуры радио.
В общем, скомбинированные события jQuery и обычный pub/sub вполне решают проблему без создания каналов с частными именами. Также не нужен контроль за тем, жив ли ещё подписчик или его уже прибило по пути и это последние коллбэки в темноте дёргаются – то-есть можно не отписываться от канала в деструкторе, тебя автоматом отпишут по выбытию.
Expose / inherit
Пример с заимствованием кода у соседних приложений во время рантайма имеет ещё одну сторону – принимаемый сниппет по идее должен получать какие-то методы или данные от принимающей стороны.
Скажем, разные приложения, подключенные более-менее унифицированным интерфейсом к разным БД, могут хотеть заимствовать всплывайку, выводящую данные о документе.
Было бы удобно ей сразу передавать кукую-то ветку манифеста вызывающего приложения, отвечающую за БД. Это и раньше можно было делать, но надо было код писать – а он всегда исполняется после require. Теперь можно сразу фэйлить старт, если вызывающая форма не expose’ит какие-то нужные фичи.
В общем то, недавний редактор JSON написан как раз отчасти чтобы это всё потестить.
Картинки
Когда рисовал схему паб/саба, внезапно нашлось три картинки. Кажется, не публиковал – и напрочь забыл, по какому случаю вообще их рисовал. Интересно, двигательная активность в сочетании с провалами в памяти ггг.
![]() | ![]() | ![]() |
Каникулы кончились, на дворе адище, русский зима, –30. А я дома в трусах и у меня внезапно ядовитый паслён Solanum pseudocapsicum мало того, что зацвёл, но ещё и ягодки будут.
В общем, сдержанно-оптимистичный пост, да.