bem-site / bem-forum-content-ru

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

Как работает BEMHTML.apply? #871

Open iarchvile opened 8 years ago

iarchvile commented 8 years ago
modules.define('test', ['i-bem__dom', 'BEMHTML'], function (provide, BEMDOM, BEMHTML) {
    provide(BEMDOM.decl(this.name, {
        onSetMod: {
            js: {
                inited: function () {
                    console.log(BEMHTML.apply({block: 'foo'}));
                }
            }
        }
    }));
});

Функция BEMHTML.apply генерирует HTML-элементы по BEMJSON-декларации в соответствии с правилами именования БЭМ.

в консоли ожидаю что-нибудь типа <div class="foo"></div> Но там ничего, пустая строка. Как это работает?

Пробую на https://github.com/bem/project-stub.git --depth 1 --branch v1.5.0 my-bem-project

tadatuta commented 8 years ago

На уровне сборки есть проверка — если ни одного клиентского шаблона не оказалось, то все шаблоны просто удаляются из сборки, потому и результат пустой.

Если добавить в папку с блоком test.deps.js с подключением любого шаблона на клиент (см. https://ru.bem.info/technology/deps/about/#Подключение-зависимостей-по-технологии), то заработает.

Еще вариант — воспользоваться опцией forceBaseTemplates, чтобы базовые шаблоны сохранялись даже при отсутствии пользовательских, то тоже все будет работать. Добавить опцию нужно сюда.

Вообще, пожалуй, стоит ее включить прямо в project-stub, спасибо за идею!