ウィンドウがあり、その中にパネルがあります。パネルにはテキスト (基本的な html) が含まれます。ウィンドウの準備ができたら、次の関数を呼び出します。この関数は、特定のクラスを持つ要素を検索し、それらのクリックイベントを登録します。これは最初は機能します。
ウィンドウを閉じて、1:1 の同様のウィンドウを再作成すると、イベントは発生しません。パネルを .update() して関数を再実行すると、同じことが起こります - イベントは発生しません。どうしてこれなの?
要素が見つかっていることはまだわかります。明らかにいくつかのイベントを登録する必要がありますが、クリックをデバッグ コードまたは受信関数でキャプチャすることはできません。
addEvents: function(win) {
// The Window
var ow = win;
// Using this debug trick I can see that on the second time the events wont fire
// -- nothing gets printed to console
Ext.util.Observable.capture(ow, function(){
console.log(arguments);
});
// Will search for elements, finds elements that have class myclass
// In my case the elements are just ordinary html tags in the visible content
// area of the panel.
var elems = ow.down('panel').getEl().select(".myclass").elements;
Ext.Array.forEach(elems, function (item, index, allItems) {
// We need Ext DOM element to be able to attach stuff to it
var elem = new Ext.dom.Element(item);
elem.on ('click', function (evt, el, o) {
ow.fireEvent('myevent', ow, elem);
});
});
}
最初は、以前のイベントを実際に登録解除してウィンドウを破棄する必要があるのではないかと思ったので、これをウィンドウのクローズに追加してみました。
window.down('panel').destroy();
window.destroy();
しかし、私が本当に理解できない他の問題があるようです。