我有一个关于show事件的问题。在我的应用程序中,我像这样处理面板的painted事件:
Ext.define('mvcTest.controller.Test', {
extend: 'Ext.app.Controller',
config: {
refs: {
panel: '#testpanel'
},
control:{
panel: {
painted: 'onPainted'
}
}
},
onPainted: function(){
alert('painted');
}
});文档说,还有一个"show“事件,但它根本没有被触发:
Ext.define('mvcTest.controller.Test', {
extend: 'Ext.app.Controller',
config: {
refs: {
panel: '#testpanel'
},
control:{
panel: {
show: 'onShow'
}
}
},
onShow: function(comp, obj){
alert('show');
}
});为什么这不起作用?我知道,提醒是错误的,但这不是问题所在。谢谢,迈克
发布于 2012-06-04 17:32:23
看起来你的控制器没有错误。关键原因可能在于应用程序的另一部分,但是...好的,根据我的经验:
painted事件简单明了。每当你的视图真正呈现在屏幕上时,painted就启动了。(注意:painted事件在视图的子组件完全呈现之前触发。换句话说,DOM生成second.)show事件不一定会触发painted first,尤其是在视图初始化时。show事件是当你先以某种方式隐藏你的视图,然后再显示它的时候触发的事件。只是经验,可能是不同的。但希望能对你有所帮助。
发布于 2012-06-04 03:30:11
你的不能在控制器中处理'painted‘事件,因为它没有被冒泡起来。
来自sencha文档:此事件不可用于事件委派。相反,由于性能原因,只有当您显式地向其添加至少一个侦听器时,才会触发“绘制”。您可以通过在面板中定义侦听器来处理它。
Ext.define('MyApp.view.MyPanel', {
extend: 'Ext.Panel',
config: {
},
listeners: {
painted: function (element, options) {
console.log("I've painted");
}
}
});但是“show”事件可以在控制器中处理。检查应用程序的另一部分是否能看到该控制器。(您是否提供了您的控制器的参考资料?您的面板id是否正确?)
发布于 2017-02-07 18:39:29
我知道这是一个古老的线程,但有些人可能会发现它很有用: Sencha最初并不会触发'show‘和’an‘事件。你需要一开始就触发它。
使用以下代码片段侦听来自控制器的事件:
Ext.define('MyApp.view.MyPanel', {
extend: 'Ext.Panel',
config: {
},
listeners: {
painted: function (element, options) {
this.fireEvent('painted', [element, options])
}
}
});https://stackoverflow.com/questions/10873143
复制相似问题