Comments 24
Джва года ждал такую либу, батя грит малаца, хорошо зделоли.
htmlString = htmlmake ->
@div "wrapper", ->
@h1 "Привет, Хабр!"
А почему в случае с дивом строка стала классом, а в случае h1 содержимым тега? В чем разница?Я так понимаю, если был передан коллбэк, то строка определяется как класс, если нет — то тег «простой» и она определяется как контент.
Я посчитал, что атрибут class является самым востребованным, поэтому в случае, если есть второй параметр (строка или коллбэк) и первый параметр является строкой, то будем считать, что это класс создаваемого элемента. Подробнее про варианты использования можно подсмотреть в тестах . Первый параметр считаем контентом элемента, если второго параметра нет.
Если библиотека основывается на таких допущениях, то имхо читать и поддерживать такой код ничуть не легче, чем
$("<div>...</div>")
.Вам никто не мешает писать более строго:
Вложенную структуру так все-равно удобнее читать, чем $("..."). ИМХО, опять же.
htmlString = htmlmake ->
@div class: "wrapper", ->
@h1 {}, "Привет, Хабр!"
Вложенную структуру так все-равно удобнее читать, чем $("..."). ИМХО, опять же.
Если требуется кусок HTML больше чем на 2-3 строчки, есть резон вынести его в отдельный файл и скормить шаблонизатору. Плюсы — не мешаем логику с разметкой и пользуемся работающим autocomplete.
Согласен. Применение этой библиотеки имеет смысл только когда в готовом js компоненте неожиданно потребовалось добавить совсем немного html. Ну и плюс к этому она весит 40кб в минимизированном виде. Так что добавим еще тех, кто пишет мобильные версии сайтов.
она весит 40кб в минимизированном видеСначала подумал, что у вас опечатка, но проверил в репозитории — так и есть. Вы где-то нахимичили, потому что это безумно много. Для сравнения, Mustache в минифицированном виде весит 9 кб, а Underscore целиком, включая шаблонизатор — 16 кб. И вот еще интересная таблица с размерами.
«Когда внедрять js-шаблонизатор ради генерации несложного набора html элементов слишком дорого...»
Даже не знаю, что дороже.
Даже не знаю, что дороже.
<div class='hello-class'>
<ul>
<li>one</li>
<li>two</li>
<li>three</li>
</ul>
</div>
Вы пропустили
@a href: "http://google.com", "underworld!"
<a href="http://google.com">underworld!</a>
А чем реакт вам не угодил?) Имхо какая-то фигня)
Лет пять назад я такое писал для PHP, тогда было актуально. А сейчас — ReactJS в руки и вперед. Вот, к примеру:
а потом это все прогнать через jsx и всё. Или, все равно же проект собирать придется, так что можно webpack заюзать, у него соответствующий loader имеется.
var name = 'Хабр'; var html = ( <div className="wrapper"> <h1>Привет, {name}</h1> </div> );
а потом это все прогнать через jsx и всё. Или, все равно же проект собирать придется, так что можно webpack заюзать, у него соответствующий loader имеется.
От чего библиотека выиграет в функционале, но может проиграть в размере:
1) «регистрация» тегов. У вас по-умолчанию мало тегов («div», «ul», «li», «form», «input», «select», «option», «i», «a», «h1», «h2», «h3», «h4», «span»)
2) data разбор (чтобы далее можно было работать проще) и сразу callback-и чтобы можно было задавать
3) приведите примеры с циклами и условиями (вроде всё очевидно, но ощущение, что чего-то не хватает)
4) документацию, а то совсем не очевидно можно ли передавать null как первый аргумет, какие ошибки могут быть отброшены в каких случаях
Оценка поверхностная, если что уже есть тогда тестов добавьте)
1) «регистрация» тегов. У вас по-умолчанию мало тегов («div», «ul», «li», «form», «input», «select», «option», «i», «a», «h1», «h2», «h3», «h4», «span»)
2) data разбор (чтобы далее можно было работать проще) и сразу callback-и чтобы можно было задавать
3) приведите примеры с циклами и условиями (вроде всё очевидно, но ощущение, что чего-то не хватает)
4) документацию, а то совсем не очевидно можно ли передавать null как первый аргумет, какие ошибки могут быть отброшены в каких случаях
Оценка поверхностная, если что уже есть тогда тестов добавьте)
Спасибо Вам за отзыв!
1) согласен, я расширил список тегов. Кроме этого, можно использовать функцию tag для создания любого тега. Интерфейс тот же, только первым параметром идет название тега:
Результат:
2) Насколько я понял, имеется ввиду такой интерфейс:
Ожидаемый результат:
Все верно? Тогда я не понял вторую часть «сразу callback-и чтобы можно было задавать», прошу привести пример.
3, 4) Согласен. Сейчас о всем функционале пока что только по тестам и можно судить.
1) согласен, я расширил список тегов. Кроме этого, можно использовать функцию tag для создания любого тега. Интерфейс тот же, только первым параметром идет название тега:
htmlmake ->
@tag "car", "bmw x6"
Результат:
<car>bmw x6</car>
2) Насколько я понял, имеется ввиду такой интерфейс:
htmlmake ->
@span data: {hello: "world"}
Ожидаемый результат:
<span data-hello='world'></span>
Все верно? Тогда я не понял вторую часть «сразу callback-и чтобы можно было задавать», прошу привести пример.
3, 4) Согласен. Сейчас о всем функционале пока что только по тестам и можно судить.
1) не помешало бы возможность конфигурировать (т.е. первый аргумент htmlmake не функция, а параметры)
2) про дату да, а про коллбеки:
Чтобы объекты не только создавались на лету, но и обработчики событий сразу привязывались к элементам.
2) про дату да, а про коллбеки:
->
@span
click: (el, evt) -> ...
blur: (el, evt) -> ...
Чтобы объекты не только создавались на лету, но и обработчики событий сразу привязывались к элементам.
Понятно. На мой взгляд в данном случае профита не много, объясню почему:
когда мы будем писать обработчики событий, в них нам все равно потребуется работать с дом деревом. В итоге это рискует вылиться и правда в какой-то недо-React) Ведь мое дерево не является виртуальным и не будет автоматически перестраиваться при изменении переменных. Это значит, что прийдется или селектить необходимые элементы и что-то в них менять (за что боролись на то и напоролись), либо вызывать полную перерисовку дерева (это некрасиво).
когда мы будем писать обработчики событий, в них нам все равно потребуется работать с дом деревом. В итоге это рискует вылиться и правда в какой-то недо-React) Ведь мое дерево не является виртуальным и не будет автоматически перестраиваться при изменении переменных. Это значит, что прийдется или селектить необходимые элементы и что-то в них менять (за что боролись на то и напоролись), либо вызывать полную перерисовку дерева (это некрасиво).
Sign up to leave a comment.
Html-maker — удобная и простая генерация html с помощью coffeescript