私はJoomla!のモジュールを作っています! Ajaxを使用して異なるクエリをデータベースにレンダリングするクライアントのページ。これらのクエリの結果、私は異なるDIVのHTMLコード全体を再生成します。私のjQueryオブジェクト内には、cache()
という名前の関数があります。この関数は、異なるイベントをアタッチする必要があるすべてのオブジェクトを格納します。私の問題は、これらのdivのいずれかからHTMLコードを再生成するたびに、すべてのオブジェクトを再構築する必要があるため、この作業をより簡単にするために新しい関数recache()
を作成したことです。JQueryオブジェクトを動的に再バインドする方法
これは最善の手順ではないと思います。 この関数を毎回cache()
と呼ぶことなく、これらのハンドラを有効に保つ方法はありますか、またはこのオブジェクトを動的に再バインドする方法はありますか?
ありがとうございました!ここで
私のコード:
var Object = {
init: function() {
this.cache();
this.bindEvents();
return this;
},
cache: function() {
OBJECTS....
this.nameObject = $('#anchor');
etc..
},
recache: function() {
Objects to be recached as needed.
},
bindEvents: function() {
EVENTS attached to the objects.
this.nameObject.on('click', 'context', this.nameFunction);
},
nameFunction: function() {
#CODE....
}
}; //END Playlist (Object)
window.Object = Object.init();
は、私が代わりに通常delegate()
、live()
またはbind()
、butI'mわからないのon()
機能を使用し、これはまさに私の問題です。
ありがとうございます!
UPPS!大変申し訳ありませんが、あなたは正しいです! HTMLコードを再生成すると、問題の関数のon()メソッドのコンテキストが完全に破棄されます。これが、これらのオブジェクトを再キャッシュする必要がある理由です。私は初心者のような気がする。 ;);)感謝!! – Alberto
クールな豆。私はあなたにはまったく言及していませんが、この答えが助けられたら、一定時間(15分?覚えていないことができます)が終わったら、左にあるチェックボックスアイコンを使ってそれを受け入れることができます –
最後に私はすべてのイベントを先祖に変更するアプリケーションをリファクタリングしましたが、Safariの小さな問題は解決しましたが、今はすべて魅力のように動作します。ありがとう!! – Alberto