問題タブ [event-binding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - バックボーンでの bind と on の違い
Backbone.js の bind() メソッドと on() メソッドの違いは何ですか?
on() のドキュメント: backbone.js のメソッドに関するドキュメント
bind() のドキュメント: underscore.js のバインド メソッドのドキュメント
オブジェクトのカスタム イベントをバインドするには、どちらを使用する必要がありますか?
使用例:
events - バックボーンでイベントをリッスンする際の問題
ビューの「attachmentClicked」関数が別のオブジェクトでいつ呼び出されるかをリッスンしようとしています。最初にイベントを呼び出すクラスは次のとおりです。
このオブジェクトはattachmentClicked
クリック時に呼び出され、このオブジェクトを作成した別のクラスで、そのイベントをリッスンしようとしています。これがそのクラスです
そのため、このクラスが作成されると、最終的にサーバーからファイルを取得する renderFiles が呼び出され、返されたモデルごとにビューが作成され、それをパラメーターとして bindEvent が呼び出されます。
次に bindEvent は、その新しく作成された項目の attachmentClicked メソッドをリッスンし、それをこのクラスの attachmentClicked 関数にバインドしようとします。しかし、うまくいきません。いくつかの方法を試しましたが、問題がどこにあるのかわかりません。ガイダンスをいただければ幸いです。
c# - イベント バインディングが失敗するのはなぜですか?
.aspx ページにリンク ボタンがあります。
コードビハインドページのメソッド:
実行時に、関数内でイベントをリンクボタンにバインドしようとしています
ただし、ユーザーが [リンク] ボタンをクリックしても、Click イベントは発生しません。理由がわからない。
助けてください。
backbone.js - イベントハンドラがMarionette.jsビューに設定されているかどうかをテストするには?
ログインフォームとして機能するMarionette.jsビューがあります。次のコード サンプルは、既に修正済みのエラーを含む関連するコード部分を示しています。
実装の大きな間違いに気付きました。Revealのコールバック関数closed
で、直接ItemViewを閉じることにしましたが、これはMarionette.js のドキュメントで読むことができるように間違っています。
View は、領域マネージャーによって自動的に呼び出される close メソッドを実装します。
バグ修正:代わりにregionclose()
で呼び出す必要があります。このエラーを修正しました。
ここで、問題をカバーするテストを実際にどのように作成できるかを自問します。テストにはジャスミンを使用します。ItemViewを誤って閉じてフォームを再送信しようとした後、イベント ハンドラーonSignInFormSubmit
が呼び出されなくなったことに気付きました。
これは、残念ながらバグ修正でも失敗するテストの最初のドラフトです。
次のようにイベントハンドラーが登録されているかどうかをテストすることもできます。
javascript - 変更のために jQuery 要素キャッシュをメソッドに渡す
問題のフィドル:
クリックして表示(試行 #1、委任イベントを使用)
クリックして表示(試行 #2、以下のブルート フォース アプローチ)
クリックして表示(試行 #3、リファクタリング、解決しようとしている問題があります)
私が取り組んでいるプロジェクトでは、かなりダイナミックなフォームを探っています。一部の静的要素に加えて、非表示の「テンプレート」マークアップ セットからクローンを作成し、ビジネス プロセスのさまざまな時点で追加できる、さまざまな対話型要素があります。
動的な性質のため、jQuery 要素キャッシュとイベント ハンドラーをオンロードでセットアップし、ユーザーに何でも実行させるという私の実証済みの方法は、この動的な性質のためにうまくいきません。動的に追加された要素にクリック イベントがないことがわかりました。
この問題を解決するために、問題のスクリプト要素ごとに手動で rebind メソッドを設定しました。再バインド プロセスには、A) 特定の記述セレクターの要素セットを再取得する、B) そのキャッシュにある既存のイベントを削除する (これらのイベントは不完全な要素セットに適用されるため)、C) bind メソッドを呼び出して新しい要素セットを適用する、が含まれます。セット全体へのイベント。
私が手に入れた力ずくの作業方法では、これが起こっていました:
当然のことながら、ほぼまったく同じコードでリバインドが頻繁に繰り返されることに気付きました。リファクタリングの機は熟しています。関数を追加した共通のライブラリ名前空間がありrebindEvents
ます...
それを呼び出してサイトを実行しようとすると、すぐにつま先をUncaughtTypeError: method click cannot be called on object undefined.
結局のところ、次のように呼び出すと次のようになります。
がメソッド$elementCache
に渡されていません。rebindEvents
デバッガーでステップすると、 is 内の $elementCacherebindEvents
がundefined
.
いくつかの便利なStackOverflow調査により、少なくとも私が慣れ親しんでいる C/C++/C# の意味では、JavaScript には参照渡しがないことが明らかになりました。
A) ある種のキャッシュ参照パスを使用して、この再バインド機能をリファクタリングすることは可能ですか?
B) リバインド関数を共通の名前空間にリファクタリングできる場合、どうすればよいですか?
jquery - これは、イベントを要素にバインドする正しい方法です
イベントを次のように要素にバインドできることを読みました
別の言い方をすれば、
正しくて最も効率的な方法はどれですか? Rails3を使用しています。