2

説明:

createEvent、addEventListener などをサポートする最新のブラウザーのみをターゲットにしています。

質問

つまり、JavaScript でネイティブに。検索すると、使用していないことがわかりcreateEvent()ます。

ここでドキュメントの回答を探していますが、見つかりませんでした。

createEvent()こちらのソースで検索しましたがヒットしませんでした。

ネイティブ言語の観点から、バックボーンはどのようにイベントを実装しますか?

彼らはオブザーバーパターンを使用していますか?

JavaScript で既にカスタム イベント ( 経由createEvent()) が利用可能であり、イベント リスナーも利用可能である場合 (addEventListener()組み込みのイベントを使用しないのはなぜですか?

4

2 に答える 2

8

Backbone がネイティブ イベントを使用しないのはなぜですか?

バックボーン ビュー以外にネイティブ イベントを使用しても意味がありません。バックボーンは、モデルコレクションおよび一般的なイベント管理を提供します

ネイティブ イベント ( 、 経由createEvent)addEventListenerは DOM ノードに結び付けられます。モデルとコレクションは DOM ノードに関連付けられていません。そのコードを再利用するには、多くの不要な手順を実行する必要があります。

バックボーン イベントはオブザーバー パターンに従いますか?

そうではありません。 パブリッシュ-サブスクライブ パターンBackbone.Eventsにかなり近いです。オブジェクトは、( 経由で) 名前付きイベントのイベント リスナーのリストを維持し、そのオブジェクトは、イベントを発生させたいときに、経由でそれらのリスナーへの呼び出しをトリガーします。ontrigger

バックボーン イベントはどのように実装されますか?

バックボーンは、その中核として、イベントごとに一連のイベント リスナーを維持します (バックボーンの古いバージョンでは、リンク リストを使用していましたが、これは低速でした)。各オブジェクトは、リスナーの独自のリストを保持します。中央レジストリはありません。

では、バックボーンはそのtriggerイベントに登録されているすべてのリスナーを呼び出します。allまた、特別なケースのイベントのリスナーも呼び出します。

于 2013-01-24T22:19:24.833 に答える
1

バックボーンはこのようにします。空白とコメントを含めて 163 行のコードです。

やり方を明確にする

  • イベント名を分割する正規表現、単純なオブジェクト リテラルであるバインドされたリスナーの単純なレジストリなどの基本的なこと
  • on|bindoff|unbindtriggeroncelistenToのAPIstopListening

理由については、著者と貢献者がプロジェクトの目標とスタイルに合っていると感じた設計上の決定に基づいています。名前空間とマルチイベント バインディングは、バックボーン モデル、コレクション、およびビューで使用される一般的なパターンを考えると便利です。

はい、オブザーバー パターンを使用しています。すべてのイベントベースのシステムには、オブザーバー パターンの実装が組み込まれています。イベント、pub/sub、およびオブザーバーは、大まかに言えば同義語ですが、詳細に話すときにそれらを区別することが重要であると考える人もいるかもしれません。

于 2013-01-24T22:17:39.283 に答える