我最近开始在一个项目上使用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
}
}
});
我想知道在同一个组件上执行这些操作的最佳实践,而不是必须执行激活侦听器,然后将元素点击事件处理程序应用于activate / show / paint / whathaveyou上的组件。
注意:使用extjs标记,因为我假设它也适用于那里 - 如果没有,请随时编辑或让我知道,我会拉标签。
答案 0 :(得分:1)
通常,你不应该从另一个组件中弄乱组件的元素,想象它们就像私有属性(组件的渲染html可以改变,所以不要依赖它),你的第一个例子中的代码看起来不太好,我甚至不知道这可以起作用。您应该实现组件事件以导出到外部世界。
在某些特定情况下,您可以通过getEl(),getScrollerEl()等方法导出元素。但大多数情况下,这表明您做错了。
P.S。绑定元素事件侦听器在文档中的Ext.dom.Element中进行了描述。