1

我最近开始在一个项目中使用 Sencha Touch,虽然我使用 ExtJS 有一段时间了,但两者在很多方面都不同。为了使学习曲线复杂化,我将 ST 应用为更多的底层框架,而不是整个 UI/框架/做所有事情。因此,我遇到了一种情况,我想使用数组方法为元素设置侦听器,同时还想保持对诸如“绘制”之类的事件的使用。

这是一个例子 - 我 99% 的肯定有一个更好的方法来做我想做的事情:

Ext.create('Ext.Container', {
    html: '<ul><li id="blah">Blah</li><li id="hooey">Hooey</li></ul>',
    listeners: [{
        element: 'element',
        delegate: 'li#blah',
        event: 'tap',
        fn: function() { /* do something for blah */ }
    },{ 
        /* repeat for hooey, etc */
    }]
});

另一方面,如果我想要容器上的标准监听器怎么办?

Ext.create('Ext.Container', {
    listeners: {
        activate: function() {
            // do some stuff here
        }
    }
 });

我想知道在同一个组件上执行这些操作的最佳实践,而不是说必须执行激活侦听器,然后将元素点击事件处理程序应用于激活/显示/绘制/whathaveyou 上的组件。

注意:使用 extjs 进行标记,因为我认为它也适用于那里 - 如果没有,请随时编辑或让我知道,我会拉标签。

4

1 回答 1

1

一般来说,你不应该从另一个组件中弄乱组件的元素,想象它们就像私有属性(组件的渲染 html 可以改变所以不要依赖它),你的第一个示例中的代码看起来不太好,我没有'甚至不知道这可以工作。您应该实现组件事件以导出到外部世界。

在某些特定情况下,您可以通过 getEl()、getScrollerEl() 等方法导出元素。但大多数情况下,这表明您做错了。

PS Binding 元素事件侦听器在文档中的Ext.dom.Element中进行了描述。

于 2012-07-27T10:21:11.577 回答