Considere o seguinte elemento:
<div @click.self.once="eat">Eat <span>me</span></div>
Se clicarmos na palavra "Comer", tudo funcionará conforme o esperado. O evento está sendo disparado uma vez e estamos felizes.
Mas se clicarmos em "eu", que é o nó filho, e depois clicarmos em "Comer", o evento nunca será disparado! Parece que .once
é muito fácil de julgar um evento como disparado.
Acho que .once
deve marcar como concluído apenas se tiver sido disparado de fato.
Obrigado por registrar o problema. Siga as Diretrizes para relatórios de problemas e forneça um JSFiddle ou JSBin mínimo contendo um conjunto de etapas reproduzíveis que podem levar ao comportamento que você descreveu.
Oi,
Não sou o OP, mas acho que consegui reproduzir o problema a que ele se referia. Anexei um JSFiddle abaixo para ilustração.
Clicar na palavra 'Comer' funciona conforme o esperado: o evento é disparado e os dados da fruta são atualizados.
Se recarregarmos o JSFiddle e clicarmos no elemento filho span 'me' e, em seguida, em 'Eat', os dados da fruta não serão atualizados.
Espero que isto ajude.
@boristhuy Obrigado por fornecer o JSFiddle. Isso é exatamente o que eu quis dizer.
Isso deve ser um bug. Atualmente, o identificador de evento será removido assim que entrar; na verdade, ele não é invocado devido à verificação dos modificadores.
Talvez precisemos atualizar o código once
para suportá-lo.
Como
(function(){
var called = false;
return function($events){
// modifiers check
// called check
if (called)return;
called = true;
// handler code
}
})()
Quanto a once
usados na função de renderização, isso traria uma mudança significativa. Estou tentando encontrar uma maneira de corrigir esse problema.
once
genCode para o modelo.once
usado na função de renderização on: {'~click': handle}
, mantenha a estratégia antiga.'~click': handle
'click': handle2
@defcc Corrigi- lo retornando um valor especial de manipuladores que são impedidos de executar. Isso pode não resolver o (3) bug que você mencionou, mas vamos lidar com isso em um PR separado, se necessário.