Dec. 6th, 2015

ermouth: (Default)

jquerymy.js до вчерашнего дня был единым куском кода и я таки решился раздербанить 4К+ строк на компоненты и полностью перенести разработку $.my с файловой системы в браузер, в мой волшебный  IDE.

Это оказалось неожиданно небыстро. Попутно пришлось решать проблему пересборки кода с переформатированием на правильное количество табов – это тоже оказалось неожиданно небыстро.

Результат почти законченного раздербанивания – вот на картиночке, колонка слева. Чёто много получилось, я даже не ожидал.

Снимок экрана 2015-12-06 в 16.33.33

Главной фичей 1.2.0 будет начало плавного депрекэйта третьего аргумента в функциях связывания. Туда передаётся DOM-node с контролом, что некошерно.

Некошерность тут в том, что если функция этот аргумент использует, вся форма становится непригодна для серверной валидации данных через неё, потому что в node.js серверным валидатором никакой DOM естессно не рисуется. А у меня внезапно на генерик-валидатор, в связи с новым JS-рерайтом в CouchDB, появились большие планы.

Я с сентября примерно думал, с какой-бы стороны мне поухватистее за проблему уцепиться, и академически прекрасное решение никак не придумывалось. Всё получалось, что надо городить виртуальный DOM, как в React, а это дурацкая идея.

Не надо на сервере DOM, ни реальный, ни виртуальный. HTML DOM – он чтобы в браузере показываться, если он выплывает на сервере где-то – значит недодумано.

И меня в какой-то момент торкнуло, что мне надо просто взять все $.my-манифесты, что мне доступны, и посмотреть, а как-же этот третий аргумент по факту в реальном коде используется. В силу того, что именование этого аргумента – вполне себе устоявшийся паттерн, это не было очень как-то сложно.

Подходящих bind- и check- функций нашлось чуть больше 1500, и внезапно анализ показал, что в 99%+ (это из тех, где аргумент используется, а таких меньше 1/5) один и тот-же сценарий. Этот аргумент используется чтобы принудительно триггерить системные события на контролах формы, по их строковому селектору как правило.

Любопытно, что все остальные сценарии использования – просто черезжопие запрещёнными мануалом способами, то-есть их можно не рассматривать вообще.

Тут то всё и расставилось. Для того, чтобы триггерить ивенты на контролах, не обязательно иметь доступ в DOM, это может делать сама форма, и даже короче получается.

То-есть вместо $ctrl.my('find', '#ctrl1').trigger('check') мы будем писать this.my.check('#ctrl1'). Красота, и прекрасно имплементится в серверном валидаторе безо всякого DOM.

Такая вот колбаса.

Profile

ermouth: (Default)
ermouth

November 2021

S M T W T F S
 123456
78910111213
14151617181920
21 222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 5th, 2025 02:44 am
Powered by Dreamwidth Studios