Vue: .onceは.selfとうまくいきません

作成日 2017年02月02日  ·  6コメント  ·  ソース: vuejs/vue

次の要素を検討してください。

<div @click.self.once="eat">Eat <span>me</span></div>

「食べる」という言葉をクリックすると、すべてが期待どおりに機能します。 イベントは一度解雇されており、私たちは幸せです。

ただし、子ノードである「me」をクリックしてから「Eat」をクリックすると、イベントが発生することはありません。 .onceは、イベントが発生したと判断するのは簡単すぎるようです。

.onceは、実際に解雇された場合にのみ、完了としてマークする必要があると思います。

bug

全てのコメント6件

問題を提出していただきありがとうございます。 問題報告ガイドラインに従い、説明した動作につながる可能性のある一連の再現可能な手順を含む最小限のJSFiddleまたはJSBinを提供してください。

なぜこれが必要なのですか?

こんにちは、

私はOPではありませんが、彼が言及していた問題をなんとか再現できたと思います。 説明のために、以下にJSFiddleを添付しました。

JSFiddle

  1. 「食べる」という単語をクリックすると、期待どおりに機能します。イベントが発生し、フルーツデータが更新されます。

  2. JSFiddleをリロードし、span子要素「me」をクリックしてから「Eat」をクリックすると、フルーツデータは更新されません。

お役に立てれば。

@boristhuyJSFiddleを提供していただきありがとうございます。 これはまさに私が意味したことです。

これはバグのはずです。 現在、イベントハンドルは、入力されると削除されます。実際、修飾子チェックのため、実際には呼び出されません。

たぶん、それをサポートするためにonceコードを更新する必要があります。

お気に入り

(function(){
  var called = false;
  return function($events){
    // modifiers check
    // called check
    if (called)return;
    called = true;
    // handler code
  }
})()

レンダリング関数で使用されるonceに関しては、重大な変更が発生します。 この問題を解決する方法を見つけようとしています。

  1. [wip]テンプレートのonce genCodeを更新します。
  2. 以下のために[完了] once機能のレンダリングに使用されるon: {'~click': handle} 、古い戦略を維持します。
  3. [完了]次のケースのupdateListenersにバグがあります。
    古い: '~click': handle
    新規: 'click': handle2

@defcc実行できないハンドラーから特別な値を返すことで修正しました。 これはあなたが言及した(3)バグに対処しないかもしれませんが、必要に応じて別のPRでそれを処理しましょう。

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

robertleeplummerjr picture robertleeplummerjr  ·  3コメント

julianxhokaxhiu picture julianxhokaxhiu  ·  3コメント

paceband picture paceband  ·  3コメント

aviggngyv picture aviggngyv  ·  3コメント

gkiely picture gkiely  ·  3コメント