Привет всем! В общем хочу динамически добавлять блоки на страницу. Использую этот пример из документации: Динамическое обновление блоков и элементов в DOM-дереве. Вот мой код:
modules.define('search-form', ['BEMHTML', 'i-bem__dom'], function(provide, BEMHTML, BEMDOM) {
provide(BEMDOM.decl(this.name, {
query : "",
cities : [],
onSetMod: {
js: {
inited : function() {
this.findBlockInside('input').on('change', this._onChange, this);
BEMDOM.append(
this.domElem,
BEMHTML.apply({
block : 'button',
text : 'Кнопка'
})
);
}
}
},
_onChange : function (event) {
this.query = event.target._val;
if (this.query.length < 2) return;
},
_filterCities : function (city) {
return city.toLowerCase().indexOf(this.query.toLowerCase()) === 0;
}
},
{}
));
});
Но блок просто не добавляется. Что я не так делаю? P.S. Для создания проекта использовал yoman generator
@kuflash Предположу, что дело в зависимостях. Чтобы в клиентский JS попали нужные BEMHTML-шаблоны, необходимо их явно указать в deps.js-файлах (см. https://ru.bem.info/tools/bem/bem-tools/depsjs/#Подключение-зависимостей-по-технологии).
Еще (но на работоспособность это влиять не должно) в приведенном коде стоит:
_val
использовать публичный методgetVal()
.theme
иsize
, чтобы она могла красиво отрисоваться (и не забыть их отразить в зависимостях блокаsearch-form
._filterCities
, кажется, что-то не так.@tadatuta я создал файл search-form.deps.js с таким содержимым:
Но это, к сожалению, не помогло. По поводу вашего код-ревью согласен. Спасибо большое за советы. С методом _filterCities все вроде порядке. В нем ищется совпадение имени города по первым символам вводимым пользователем в строку поиска.
@kuflash В приведенном коде причин не вижу, тут все хорошо. Есть возможность запушить на github весь проект?
@tadatuta запушил https://github.com/kuflash/bem-weather
@kuflash https://github.com/kuflash/bem-weather/pull/1/files ;)
@tadatuta спасибо огромное! ;) Блин, вот я опечатался то... Буду внимательнее впредь