0

不要なイベントハンドラーのオン/オフの削除で問題が発生しており、イベントバインディングをhtml要素のexpandoidで名前空間化したいと考えています。

function SomeWidget(el) {
   $(document).on('handler.MY_EXPANDO_ID', this.handler.bind(this));
};
var widget = new SomeWidget($(sometargetelement));

一意の識別子がない場合の問題は、現在同じ名前空間を使用していることです。これは、同じ時間のウィジェットが2つあると失敗し、1つを削除すると、両方のオブジェクトのハンドラーが削除されます。

質問1)要素の内部エキスパンドIDにアクセスするにはどうすればよいですか?質問2)これを行うためのより良い方法はありますか?Function.bind!==関数。実際のメソッドポインタに基づいて削除することはできません。

jQuery1.8.3を使用しています

4

1 に答える 1

1

jQuery UI のウィジェット ファクトリは、ウィジェットが作成されるたびにカウンターをインクリメントします。次に、eventNamespaceまさにこの理由で利用可能なプロパティがあります。同じタイプのことを達成できます:

function SomeWidget(el) {
    SomeWidget.instances++;
    var eventNamespace = ".SomeWidget" + SomeWidget.instances;

    $(el).on("handler" + eventNamespace, ...);
}
SomeWidget.instances = 0;

SomeWidgetこれにより、新しいインスタンスが作成されるたびにインスタンスが増加します。内部的には、eventNamespaceイベントのバインド/バインド解除に使用できる にアクセスできます。

ウィジェットの外部にアクセスする必要がある場合はeventNamespace、要素に as データを保存できます。

$(el).data("eventNamespace", eventNamespace);

ただし、同じ要素を持つウィジェットの複数のインスタンスを作成した場合、これは上書きされます。

于 2012-12-28T20:15:54.907 に答える