В приложении типа чат есть два списка: список общих комнат и список приватных бесед.
Реализовал их блоком list
с соответствующим модификатором type
.
Задача: реализовать выбор одного элемента из списка.
Проблема: каждый инстанс блока list
запоминает свой активный элемент списка.
// При клике на элемент списка ставлю соответствующий модификатор
_onItemClick : function (e) {
var item = $(e.currentTarget);
var type = this.getMod(item, 'type');
this.setMod(item, 'current', true);
}
// При выставлении модификатора новому элементу, удаляю модификатор у предыдущего
onElemSetMod : {
'item' : {
'current' : {
'true' : function (elem) {
this.delMod(this._current, 'current');
this._current = elem;
}
}
}
}
Как грамотнее всего реализовать, чтобы при выборе одного элемента удалялся модификатор не только в текущем инстансе блока, а во всех списках?
Так же интересует насколько правильной является реализация "оборачивания" всех элементов списка в контейнер с помощью создания нового элемента container
// BEMJSON
{
block: 'list',
mods: { 'type' : 'channels' },
content: [
{ elem: 'title', content: 'Каналы' },
{ elem: 'container' }
]
}
// BEMHTML
block('list').elem('container').tag()('ul');
// JS-реализация загрузки данных в список
_getListData : function (type) {
var container = this.elem('container');
API.get('channels.list', { type: type }).then(function (data) {
var channels = data.channels;
channels.forEach(function (channel) {
BEMDOM.append(container,
BEMHTML.apply({
block : 'list',
elem : 'item',
mods : { type : type },
content : channel.name,
js : {
id : channel.id,
name : channel.name
}
})
);
});
});
}
Спасибо!
Например, можно в момент инициализации каждого
list
сохранять ссылку на него в класс:Вполне нормальный способ.
Большое спасибо!