1

我有一个窗口,里面有一个面板。面板包含文本(基本 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();

但是,似乎我还有其他一些我真的无法理解的问题。

4

1 回答 1

1

这是一种非常类似于 JQuery 的添加事件的方式。您正在处理组件,应该在组件上添加事件侦听器。如果您需要将事件委托给 html 元素,那么您需要在封装元素的组件上设置一个事件侦听器,并将委托配置添加到实际的 html 元素。

这里有一些资源: 解释 ExtJS 4 事件处理

事件委托解释: http ://www.sencha.com/blog/event-delegation-in-sencha-touch (同样适用于 extjs)

更多关于使用 extjs 的监听器:https ://stackoverflow.com/a/8733338/834424

于 2013-06-17T20:35:23.017 回答