Vue: .uma vez não vai bem consigo mesmo

Criado em 2 fev. 2017  ·  6Comentários  ·  Fonte: vuejs/vue

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.

bug

Todos 6 comentários

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.

Por que isso é necessário?

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.

JSFiddle

  1. Clicar na palavra 'Comer' funciona conforme o esperado: o evento é disparado e os dados da fruta são atualizados.

  2. 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.

  1. [limpar] atualize once genCode para o modelo.
  2. [feito] para once usado na função de renderização on: {'~click': handle} , mantenha a estratégia antiga.
  3. [concluído] existe um bug em updateListeners para o caso abaixo:
    antigo: '~click': handle
    novo: '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.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

robertleeplummerjr picture robertleeplummerjr  ·  3Comentários

finico picture finico  ·  3Comentários

franciscolourenco picture franciscolourenco  ·  3Comentários

aviggngyv picture aviggngyv  ·  3Comentários

loki0609 picture loki0609  ·  3Comentários