EventDispacherの仕様の互換性・相互運用性向上 #302

Closed
simdy opened this Issue May 2, 2014 · 1 comment

Comments

Projects
None yet
2 participants
@simdy
Member

simdy commented May 2, 2014

・基本的な考え方:DOM Level 3のサブセットとする。
 ・DOMイベントではないので、プロパゲーションに関係するプロパティなどは不要とする
 ・必要に応じてDOM Level 3に存在しないAPIを追加することは可とする

・利便性のため、dispatchEvent()は任意のオブジェクトを引数として受け取れることとする。
 ただし、その場合、自動的に特定のプロパティを付加する。

付加するプロパティ:

  • target (=== dispatchEventのthis)
  • timeStamp (=== dispatchEvent呼び出し時の時刻(new Date().getTime()))

また、以下を行う:

  • isDefaultPrevented()
  • isImmediatePropagationStopped()

があるか、存在をチェックし、なければ、それぞれ

  • preventDefault()(とisDefaultPrevented)
  • stopImmediatePropagation()(とisImmediate~~)

を付加する。(付加するかどうかの判定は独立に行う。)
これは、jQuery Eventオブジェクトとの互換性対策、かつ内部的な制御機構との整合をとるため。

なお、ほとんどのケースは以下の2パターンと想定される:
①jQuery Eventが渡された場合⇒上記のisXxxは両方とも存在する(かつ、preventもstopもある)ので問題ない。
②ただのオブジェクトが渡された場合⇒isXxxとprevent,stopの4メソッドを全て追加するので、やはり問題ない。

isXxxがあるのにそれに対応するフラグセットのメソッドがない場合、
ユーザーが独自にフラグをセットする手段を持たせていると考え、prevent/stopの各メソッドは付加(&上書き)しないこととする。

@simdy simdy added this to the v1.1.10 milestone May 2, 2014

@simdy simdy added the enhancement label May 2, 2014

@simdy

This comment has been minimized.

Show comment
Hide comment
@simdy

simdy May 2, 2014

Member

また、dispatchEvent()を行った場合、その間にadd/removeEventListenerを行っても、その変更は反映されない(次回のdispatch時から反映される)。つまり、dispatchEvent()を呼んだ瞬間に、どのリスナーが呼ばれるかは確定することとする。
この挙動は、DOM Events仕様と同じである。

Member

simdy commented May 2, 2014

また、dispatchEvent()を行った場合、その間にadd/removeEventListenerを行っても、その変更は反映されない(次回のdispatch時から反映される)。つまり、dispatchEvent()を呼んだ瞬間に、どのリスナーが呼ばれるかは確定することとする。
この挙動は、DOM Events仕様と同じである。

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 2, 2014

fukudayasuo
#302 dispachEvent時にイベントオブジェクトに以下のプロパティを(無ければ)追加するようにしました。
* target
* timeStamp
* isDefaultPrevented()
* preventDefault()
* isImmediatePropagationStopped()
* stopImmediatePropagation()

dispachEventが呼んだ瞬間のリスナが実行されるようにしました。

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 2, 2014

@simdy simdy closed this May 2, 2014

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment