我有一个窗口,里面有一个面板。面板包含文本(基本 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();
但是,似乎我还有其他一些我真的无法理解的问题。