我有一个窗口,里面有一个面板。该面板包含文本(基本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);
});
});
}
我起初怀疑我必须实际取消注册以前的事件并销毁窗口,所以我尝试将其添加到窗口的 close 中:
window.down('panel').destroy();
window.destroy();
然而,我似乎还有其他一些我无法理解的问题。
答案 0 :(得分:1)
这是一种非常JQuery的添加事件的方法。您正在处理组件,并应在组件上添加事件侦听器。如果您需要将事件委托给html元素,那么您需要在Component上设置一个封装元素的单个事件监听器,并将委托配置添加到实际的html元素中。
以下是一些资源: Explain ExtJS 4 event handling
活动代表团解释说: http://www.sencha.com/blog/event-delegation-in-sencha-touch(也适用于extjs)
有关extjs的监听器的更多信息:https://stackoverflow.com/a/8733338/834424