bem-site / bem-forum-content-ru

Content BEM forum for Russian speak users
MIT License
56 stars 6 forks source link

Как обрабатывать bemtree? #287

Open belozer opened 9 years ago

belozer commented 9 years ago

Что-то я не понял как запустить обработку bemtree, а точнее в каком месте...

Я хочу из bemjson перейти на bemtree - что для этого нужно (как и где вызывать шаблоны bemtree)?

bemtree в bemjson можно вызывать? Я так понимаю, что должно быть что-то типо этого

content: (function() { BEMTREE.apply('blockName'); } )()
qfox commented 9 years ago

https://github.com/express-bem/bemtree — попробуй ;) https://github.com/express-bem/express-bem/#usage

belozer commented 9 years ago

@zxfox а без экспресса можно? Стандартными средствами

apsavin commented 9 years ago

bemtree - это когда вы создаете динамический сайт какой-то, не статический. Что такое стандартные средства? Кто вас знает, на чем вы пишете динамический сайт? Если на экспрессе - то вот, пример выше. Если на чем-то другом - посмотрите пример выше и сделайте по аналогии.

belozer commented 9 years ago

Т.е. bemtree на статическом нет смысла применять?

Я делаю прототип на bem-stub. Из него перевожу на yii (php). У меня есть блок, в котором много дочерних блоков. Чтобы не загромождать bemjson - хотел вынести в bemtree этот участок.

Видимо сделаю через отдельный блок, который будет содержать все зависимости.

qfox commented 9 years ago

Т.е. bemtree на статическом нет смысла применять?

Тип того. Там обычно в 99% случаев хватает js вставок в bemjson.js. Типа fs.readFileSync('./something.js') и ['1', '2', '3'].map(function (el) { return { block : 'item', content: el }; })

belozer commented 9 years ago

Хочется наиболее простой способ, чтобы команду меньше пугать БЭМом ;)

belozer commented 9 years ago

Пока наиболее "правильным" кажется вариант указания всех зависимостей в головном блоке (пока сделал так). или создания блока-сборщика (что возможно было бы лучше)

tavriaforever commented 9 years ago

Попробуй вот эту сборку https://github.com/tadatuta/bem-bemtree-static-project-stub . Здесь вместо bemjson используется bemtree и в режиме дев сервера получаем html

belozer commented 9 years ago

@tavriaforever спасибо :) Вроде то, что нужно было

Guria commented 9 years ago

@belozyorcev а куда делся сегодняшний коммент? я его обсудить хотел.

belozer commented 9 years ago

@Guria. Да написал, поспешил... :) Дабы не было лишних "разборов полётов". Понял ошибку того способа и не захотел отнимать время у других.

При сборке bh - у нас появлялся бы лишний мусор, что есть не очень хорошо.

Я сделал по методу, который предложил @zxqfox, но только чере requier.

Создал отдельную папку (_parts) в корне (хотя лучше наверное было бы в bundels). В этой папке хранятся "большие" куски bemjson, которые повторяются на разных страницах.

Пока как-то так :smile:

ilyar commented 9 years ago

Еще в клубе была тема http://clubs.ya.ru/bem/5630 (архив https://ru.bem.info/forum/issues/-632/, не очень корректно перенесли), думаю этот эксперимент в тему. Суммарно: блок https://github.com/ilyar/bem-examples/tree/master/desktop.blocks/someBlock, применение http://jsfiddle.net/ilyar/5dw8Q/ будет интересно услышать критику.

Еще интересно раскрыть вопрос применения bemtree в браузере, поделитесь опытом. @zxqfox действительно в 99% случаев хватает js вставок в bemjson.js?

apsavin commented 9 years ago

@ilyar почему в someBlock.bemtree все в def?

А что хочется узнать про bemtree в браузере? Какого опыта не хватает?

qfox commented 9 years ago

@ilyar :) для сборки статики я не вижу кейсов, где без bemtree сверстать не получится. Для динамики - по желанию.

Guria commented 9 years ago

Я сделал себе такой вариант, который собирает в клиентский js вообще весь bemhtml и bemtree. Спасибо @tadatuta за исходный репозиторий. Использовать можно следующим образом:

modules.define('router', ['BEMHTML', 'BEMTREE', 'i-bem__dom'], function(provide, BEMHTML, BEMTREE, BEMDOM){
  BEMTREE.apply({ block: 'page1'}).then(function(bemjson) {
    BEMDOM.append(BEMDOM.scope, BEMHTML.apply(bemjson));
  });
});

не вижу кейсов, где без bemtree сверстать не получится

Сверстать то можно и данные входные преобразовать тоже. но вроде двухпроходную шаблонизацию для того и придумали, что бы данные и представление отдельно обрабатывать. Имхо для SPA bemtree - мега полезная вещь.

ilyar commented 9 years ago

@zxqfox ничего не говорю про статику, я говорю о применении без nodeJs только в браузере и как отметил @Guria для SPA bemtree - мега полезная вещь. Еще можно добавить динамический слой поверх закешированной статики.

qfox commented 9 years ago

@ilyar В случае SPA я строго за bemtree на клиенте и согласен с @Guria.

Guria commented 9 years ago

@zxqfox Для статики тоже полезно, чтобы не держать в одних шаблонах и логику обработки неких исходных данных и непосредственно вёрстку. #337 яркий пример такой перегрузки.

Попробуй вот эту сборку https://github.com/tadatuta/bem-bemtree-static-project-stub . Здесь вместо bemjson используется bemtree и в режиме дев сервера получаем html

Мне кажется в project-stub надо добавить вариант сборки html по bemjson в два прохода: bemtree + bemhtml. Опционально сборку browser.bemhtml по depsByTech.

Таким образом будет хороший пример использования двухпроходной шаблонизации. Там же можно продемонстрировать подход: блок сам ходит за нужной ему информацией.

tadatuta commented 9 years ago

@Guria я давно думаю про то, чтобы в project-stub собирать BEMJSON с помощью BEMTREE, но меня смущает то, что сейчас новичок может посмотреть на index.bemjson.js, плюс-минус понять за что отвечают его поля и сходу получить какой-то результат благодаря базовым шаблонам (пусть не прямо уж интуитивно понятно, но более-менее просто). А если, чтобы получить хоть что-то минимальное, потребуется сначала запихнуть в голову двухпроходность и xjst-шаблоны, это может оказаться слишком высокой планкой. С другой стороны для тех, кто уже освоился, не должно быть большой проблемой раскомментировать BEMTREE в конфиге.

Guria commented 9 years ago

Не. Я предлагаю bemjson из бандла подавать на вход bemtree:

BEMTREE.apply(bundleBemjson).then(function(bemjson){
  out = BEMHTML.apply(bemjson);
})

Если шаблонов на bemtree ещё нет или никогда не будет, bemjson в неизменном (почти :) ) виде будет шаблонизирован BEMHTML.

tadatuta commented 9 years ago

@Guria интересная мысль. в ней смущает лишь то, что для тех, кто не пользуется bemtree, упадет скорость сборки, хотя оно им вообще не надо

Guria commented 9 years ago

Как вариант чтобы был такой вариант в закомментированном виде.

apsavin commented 9 years ago

Ребята, мне кажется, project-stub все-таки должен оставаться настолько простым, насколько это возможно.) А вместо вариантов "в закомментированном виде" лучше добавлять опции в генератор бем-проектов.

Guria commented 9 years ago

Да, генератор вариант. Забыл его упомянуть.