Estou procurando adicionar um manipulador de clique aos itens da lista principal de tópicos (para adicionar comportamento personalizado sob certas condições). É possível usar algo como api.decorateWidget() para adicionar um manipulador de eventos a cada instância de um widget específico?
—
Outras abordagens consideradas:
Não é prático usar addEventListener em uma função global, pois itens adicionais da lista de tópicos podem ser carregados após o carregamento da página, por exemplo, com rolagem infinita. (A implementação precisaria usar algo como MutationObserver para observar alterações no DOM e anexar mais manipuladores de eventos à medida que mais widgets são renderizados)
Seria possível anexar um manipulador de clique ao body e monitorar por meio de propagação de eventos (como feito no jQuery com $("body").on("click", ".list-item-topic", function())), mas preciso ser capaz de usar preventDefault() e stopPropagation(), o que acredito que essa abordagem não suporte.
Ah, obrigado! Esses são eventos DOM padrão? Ou seja:
Pelos exemplos, parece que os eventos não são eventos DOM padrão como click, mouseover, etc. É possível fazer algo como api.attachWidgetAction("topic-list-item", "click", ...)?
É possível acessar o event, por exemplo, para fazer event.stopPropagation()?
Se esses não forem eventos DOM padrão, como descubro quais eventos um widget específico emite?
Além disso: estou um pouco confuso aqui, mas como posso encontrar o “widget” associado a um elemento de interface específico? (no meu caso: o widget que alimenta o topic-list-item, exibindo um tópico individual em uma lista de tópicos). Do diretório de widgets, nenhum parece relacionado ao topic-list-item. Este “componente” parece ser, em vez disso, responsável por renderizar o topic-list-item.
Não está claro a distinção entre widgets e componentes (peço desculpas por não estar mais familiarizado) — presumivelmente, só é possível anexar manipuladores de eventos com api.attachWidgetAction a “widgets” e não a “componentes”. Existe um equivalente para componentes?
Para outros que, no futuro, procurarem substituir manipuladores de eventos para componentes, adicione o seguinte a javascripts/nome-do-seu-plugin/inicializadores/nome-do-script-de-sua-escolha.js.es6: