Доброго дня.
Не могу разобраться, как правильно заменять содержимое блока, чтобы дочерние блоки были автоматически инициализированы.
Есть панель со ссылками, которые являются блоками. По событию содержимое панели нужно обновить новыми ссылками. Код выглядит так:
var html = // ручной рендеринг
BEMDOM.update(this.domElem, html);
В документации (https://ru.bem.info/technology/i-bem/v2/i-bem-js-init/#init-ajax) написано, что BEMDOM.update выполняет динамическую инициализацию блоков, но для моих ссылок этого не происходит, и приходится писать вот такой код инициализации:
$(".notes-link", this.domElem).each(function(_, link) {
$(link).bem("notes-link");
});
Я подозреваю, что блоки для автоматической инициализации нужно обложить какими-нибудь специальными атрибутами. Пробовал оформлять ссылки так:
<a href="#" class="notes-link i-bem" data-bem="{"notes-link": {}}">link text</a>
Но не помогло.
Может кто-нибудь подсказать, как правильно инициализировать новодобавленный контент?
Если речь идет о ссылках, то они инициализируются лениво, по событию на их DOM элементе. Также стоит проверить что блок
link
есть в зависимостях.notes-link
. А вам вообще зачем инициализировать эти блоки?Если вставляемый HTML выглядит так
для блока
notes-link
написана правильная JS-декларация, т.е. что-то вродепри этом код не использует отложенную инициализацию и точно попадает в сборку, то
BEMHTML.update()
обязан вызывать инициализацию.Почти наверняка нарушается один из пунктов выше.
@kompolom ну, инициализация нужна больше в качестве эксперимента - убедиться, что я понимаю, как делать такие вещи.
@tadatuta действительно, оформление ссылки классом
i-bem
и атрибутомdata-bem='{"notes-link":{}}'
решает проблему. Не знаю, почему мне вчера показалось, что не работает. Видимо что-то напутал.Спасибо большое!
Кстати, сейчас проделал несколько экспериментов, работает и без
Не должно?
Должно, это был просто пример "какого-то js"
@apsavin понял, спасибо!