Была история, - подавал, мне грамотно обосновали отказ, посоветовали путь решения.
Это сподвигло меня более глубоко разобраться в вопросе и действительно найти правильное для моих задач решение, а не рефлексировать бесконечно на тему несовершенства мира.
Ещё разик напишу, если Вам не удалось прочитать с первого захода ;) - Если Вы считаете что какая-та функциональность необходима, - Вы можете обратиться в группу разработки стандартов.
Придётся обосновать необходимость и сделать внятное предложение.
Работа со стилями - предполагаемое поведение от дом. Он должен давать все возможности необходимые для реализации всех аспектов верстки через js.
Предполагаемое поведение DOM - это работа с нодами, и она вполне адекватно реализована, включая и работу со стилями элементов.
Работа с классами CSS реализована в API CSSOM и там (как Вам уже справедливо указали) можно и классы создавать и псевдо классы к селекторам навешивать.
Здесь опять, если Вы знаете как улучшить API - делайте предложение. Отказ обычно грамотно обосновывают :)
Эта притензия не совсем к DOM. Насколько я знаю, ожидаемое Вами поведение не является частью спецификации. Попробуйте сформулировать и отправить предложение в группу разработки стандартов.
С DOM в том и проблема, что в него заложено крайне мало возможностей по работе с элементами. Либо сделано это как-то криво, недоработано, не покрывает всех функций.
Хм, крайне спорно, DOM - это такой турбо composite, которого больше нигде нет. Не могли бы Вы привести пример возможности по работе с элементами, которой нет в DOM?
Извиняюсь конечно, но опять скажу - использовать CustomElements как единственную основу для декомпозиции - это приблизительно как использовать js без модулей и closures
Ок, даже если так, вы же понимаете, что ваша либа этих проблем никак НЕ избегает? Вы используете синтаксис кастомных тегов, а они проверяются в общем реестре и могут точно также конфликтовать при наличии в общем скоупе других кастомных тегов.
:) "синтаксис кастомных тегов" никогда не проверяется в общем реестре, просто потому, что никогда не попадает в общий скоуп, ну кроме тех случаев, когда это оправданно и делается преднамеренно.
Пример, приведённый мной - это модуль, - библиотека компонентов, которая может подгружаться со всеми зависимостями по требованию или доставляться в преобразованном виде в составе бандла.
Для решения этой проблемы есть такая штука как тег template, но вы его не используете. Как не используете многих других современных стандартов для избежания проблем.
Ну какие современные стандарты template в продакшене, в 2016 году, ну в самом деле? (Библиотека, способна работать в ИЕ-8 без полифиллов :) )
Вы понимаете разницу между инкапсулированной инициализацией компонента изнутри, по коллбеку, который вызывается браузером автоматически, и поиском DOM-элементов в документе и инициализацией компонента вручную извне? И тоже самое касается очистки памяти.
Компонент - это и есть капсула (DOM + initScript + life cycle handlers), да надо вызвывать component.mount(target, index?) вместо target.appendChild(component) - не большая плата.
Виджеты бывают, условно, распределенными по странице: в одном месте может быть, к примеру, UI для загрузки файла, а в другой - прогресс этой загрузки. Помимо этого, у вас может быть библиотека общих UI-примитивов, которая может использоваться как "внутри" так и "снаружи". Помимо этого, вас кейс подразумевает ваш полный контроль над содержимым виджета, а значит, отсутствие проблем с общей областью для имен кастомных тегов.
Это ВСЁ поддерживается, а про общую видимость имён я уже написал чуть выше :)
И никаких проблем с дебагером при использовании биндингов нет, это такой-же javascript,
Предполагаю - он всё-же немного под капотом, про пограничные случаи недопонял,
Вы можете предпочитать такой подход ровно до того момента, пока он не перестанет работать.
Это справедливо для любого подхода
Доминирование React, на мой скромный взгляд, это очень печальная ситуация. Надеюсь она будет меняться, так как технически и концептуально - React совсем не достоин такой популярности и обладает огромным количеством недостатков.
Здесь поддерживаю абсолютно, но на изменение ситуации не надеюсь
Но в данном случае, мы тут сравниваем production-ready библиотеку, которая активно тестируется и используется другими разработчиками в ЗНАЧИТЕЛЬНОМ количестве очень разных кейсов, и ваш эксперимент. Интересный эксперимент, но не более того пока, уж простите.
Мы тут сравнивали библиотеку, реализующую DSL и практически ванильный HTML+JS с оочень тонкой надстройкой для инкапсуляции разметки и логики работы с ней в переиспользуемых компонентах.
Даже не представляю себе кейсов, с которыми связка HTML+JS не справится.
PS: С моей стороны было наивно полагать, что кто-то воспользуется Google или посмотрит мои публикации на хабре, в любом случае диалог получился приятный и содержательный, спасибо за развёрнутую обратную связь.
Эта проблема имеет множество решений, от совсем простых, типа соглашений о нейминге (префиксы, постфиксы), до более сложных, в виде дополнительного контроля регистрации компонентов, на уровне библиотеки. В частности, в Симбиот встроено такое решение.
На мой (возможно избыточно придирчивый и возможно недостаточно компетентный) взгляд - здесь любое решение выглядит как костыль. Лучше избежать проблем, тогда и решать их не придётся.
А вот без CustomElements, вам придется ручками все постоянно инициализировать и убивать, ручками искать и указывать элементы, где должна происходить инициализация - и вот это уже, проблема куда более серьезная, особенно для виджетов, которые могут использоваться в динамической и неконтролируемой, непосредственно вами, среде.
С CustomElements точно так-же приходится ручками инициировать и подчищать хвосты.
И потом, я не предлагаю отказываться от CustomElements как таковых, просто не использовать их для внутренней декомпозиции приложения, можно завернуть ВЕСЬ виджет в один CustomElement и максимально избежать воздействия внешней среды минимально воздействуя на неё в свою очередь.
А потом, когда ваш компонент станет действительно сложным,
Я сделаю декомпозицию, - это почти бесплатно ;)
вы НЕИЗБЕЖНО начнете путаться в этих повторениях.
Здесь вопрос предпочтений, - я предпочитаю путаться в коде, Вы видимо предпочитаете путаться в binding'ах, я предпочитаю использовать при распутывании дебаггер, Вы очевидно используете что-то другое.
А еще, вам может понадобится привязывать данные напрямую к текстовым нодам, и тут вообще полный караул.
Опять-же, предпочитаю не привязывать данные к текстовым нодам а использовать <span ref="key">, ну и собрать строку любым способом мне тоже никто не запрещает.
PS. На виджетах я сам "собаку съел". И даже продолжаю есть. Именно так и появился Симбиот.
А я ушёл таки в бэк, ибо там где я сейчас работаю, на фронте безраздельно свирепствует React :)
Была история, - подавал, мне грамотно обосновали отказ, посоветовали путь решения.
Это сподвигло меня более глубоко разобраться в вопросе и действительно найти правильное для моих задач решение, а не рефлексировать бесконечно на тему несовершенства мира.
Вы попробуйте - в любом случае это не повредит.
Ещё разик напишу, если Вам не удалось прочитать с первого захода ;)
- Если Вы считаете что какая-та функциональность необходима, - Вы можете обратиться в группу разработки стандартов.
Придётся обосновать необходимость и сделать внятное предложение.
Предполагаемое поведение DOM - это работа с нодами, и она вполне адекватно реализована, включая и работу со стилями элементов.
Работа с классами CSS реализована в API CSSOM и там (как Вам уже справедливо указали) можно и классы создавать и псевдо классы к селекторам навешивать.
Здесь опять, если Вы знаете как улучшить API - делайте предложение. Отказ обычно грамотно обосновывают :)
Эта притензия не совсем к DOM.
Насколько я знаю, ожидаемое Вами поведение не является частью спецификации. Попробуйте сформулировать и отправить предложение в группу разработки стандартов.
Но как Вы сами заметили
Мне почему-то больше понравился конечный результат, чем исходник, в чём профит такого подхода?
Хм, крайне спорно, DOM - это такой турбо composite, которого больше нигде нет. Не могли бы Вы привести пример возможности по работе с элементами, которой нет в DOM?
Каких функций не хватает?
Да думаю многие просекли, просто непонятен результат ваших изысканий, всё-то Вам не нравится: SGML Вам колючий, React душный, CSS слишком отдельный...
Будут конкретные предложения?
Не томите :)
Инструменты разработчика -> вкладка сеть
Заинтриговали, жду следующего доклада
Ну а был бы смысл говорить о чём-то не конкретном? ;)
Весь дьявол в DOM API, думаю Вы с ним знакомы не понаслышке, библиотека просто даёт возможность масштабировать наиболее очевидное совмещение HTML и JS
Здесь нет синтаксиса - его вовсе нет.
Субъективщина :)
Макеты - не шаблоны, клея 2k (с lazy loading модулей 3.7k), работаем прямо с DOM
живых объектов, как в детстве :)
других технологий нам браузер не предоставил, они привычные и достаточно наглядные
Декларативный HTML/XML макет, императивно (ручками :) шатаем из прямо связянного с макетом скрипта
как-то так, здесь два компонента, один использует другого
всё это заливается в фабрику
из фабрики берётся скриптом и монтируется туда, куда нужно
Поставил бы под сомнение шаблоны как таковые.
как всегда - хотелось бы увидеть реализацию "стандартного" приложения, чтобы было с чем сравнить https://todomvc.com/
Извиняюсь конечно, но опять скажу - использовать CustomElements как единственную основу для декомпозиции - это приблизительно как использовать js без модулей и closures
W3View ? ванильные компоненты без магии
а ведь можно и
так тоже было можно ;)
ну так-то можно конечно, но придётся добавить пару аргументов и превратить эту красоту в вырвиглазную зубодробильню :)
хм, не нашёл такого в спецификации, в принципе вводить кастомные атрибуты без префикса было ошибкой
:) "синтаксис кастомных тегов" никогда не проверяется в общем реестре, просто потому, что никогда не попадает в общий скоуп, ну кроме тех случаев, когда это оправданно и делается преднамеренно.
Пример, приведённый мной - это модуль, - библиотека компонентов, которая может подгружаться со всеми зависимостями по требованию или доставляться в преобразованном виде в составе бандла.
Ну какие современные стандарты template в продакшене, в 2016 году, ну в самом деле? (Библиотека, способна работать в ИЕ-8 без полифиллов :) )
Компонент - это и есть капсула (DOM + initScript + life cycle handlers), да надо вызвывать component.mount(target, index?) вместо target.appendChild(component) - не большая плата.
Это ВСЁ поддерживается, а про общую видимость имён я уже написал чуть выше :)
Предполагаю - он всё-же немного под капотом, про пограничные случаи недопонял,
Это справедливо для любого подхода
Здесь поддерживаю абсолютно, но на изменение ситуации не надеюсь
Мы тут сравнивали библиотеку, реализующую DSL и практически ванильный HTML+JS с оочень тонкой надстройкой для инкапсуляции разметки и логики работы с ней в переиспользуемых компонентах.
Даже не представляю себе кейсов, с которыми связка HTML+JS не справится.
PS: С моей стороны было наивно полагать, что кто-то воспользуется Google или посмотрит мои публикации на хабре, в любом случае диалог получился приятный и содержательный, спасибо за развёрнутую обратную связь.
На мой (возможно избыточно придирчивый и возможно недостаточно компетентный) взгляд - здесь любое решение выглядит как костыль. Лучше избежать проблем, тогда и решать их не придётся.
С CustomElements точно так-же приходится ручками инициировать и подчищать хвосты.
И потом, я не предлагаю отказываться от CustomElements как таковых, просто не использовать их для внутренней декомпозиции приложения, можно завернуть ВЕСЬ виджет в один CustomElement и максимально избежать воздействия внешней среды минимально воздействуя на неё в свою очередь.
Я сделаю декомпозицию, - это почти бесплатно ;)
Здесь вопрос предпочтений, - я предпочитаю путаться в коде, Вы видимо предпочитаете путаться в binding'ах, я предпочитаю использовать при распутывании дебаггер, Вы очевидно используете что-то другое.
Опять-же, предпочитаю не привязывать данные к текстовым нодам а использовать <span ref="key">, ну и собрать строку любым способом мне тоже никто не запрещает.
А я ушёл таки в бэк, ибо там где я сейчас работаю, на фронте безраздельно свирепствует React :)