Из спецификаций Riot.js
Я не смог найти ничего, что позволило бы вам отслеживать все теги одного типа, поэтому решение, которое я могу придумать для этого конкретного сценария, состоит в том, чтобы хранить коллекцию всплывающих подсказок под окнами и показывать /скрывать их по щелчку на каждой отдельной подсказке.
Поскольку у меня нет всех компонентов, которые вы опубликовали, я создал минимальный рабочий пример над здесь .
Мой демонстрационный компонентвыглядят так:
<tooltip>
<p>{ content }</p>
<span riot-style="display: { show_message ? 'inline-block' : 'none' }; background: black; color: white; padding:3px;"> { message } </span>
const self = this;
this.content = opts.content || '';
this.message = opts.message || '';
this.root.addEventListener('click', (e) => self.showTooltip(e));
this.toggle_message = function(show) {
self.show_message = show;
self.update();
};
this.showTooltip = function(e){
const bShow = !self.show_message;
for(var i=0; i<window.tooltips.length; i++){
window.tooltips[i].toggle_message(false);
}
self.toggle_message(bShow);
};
<script>
this.on('mount', function(){
if(!window.tooltips)
window.tooltips = [];
window.tooltips.push(this);
});
</script>
</tooltip>
При событии монтирования он добавляет себя в коллекцию массивов window.tooltips
, а затем при нажатии на один из компонентов обработчик события выполняет итерацию по всем зарегистрированным компонентам и скрывает их перед отображением текущего компонента.