mic*_*cho 2 sencha-touch sencha-touch-2
我对这个show
事件有疑问.在我的应用程序中,我正在处理painted
我的面板事件,如下所示:
Ext.define('mvcTest.controller.Test', {
extend: 'Ext.app.Controller',
config: {
refs: {
panel: '#testpanel'
},
control:{
panel: {
painted: 'onPainted'
}
}
},
onPainted: function(){
alert('painted');
}
});
Run Code Online (Sandbox Code Playgroud)
文件说,还有一个"节目"事件,但它根本没有被解雇:
Ext.define('mvcTest.controller.Test', {
extend: 'Ext.app.Controller',
config: {
refs: {
panel: '#testpanel'
},
control:{
panel: {
show: 'onShow'
}
}
},
onShow: function(comp, obj){
alert('show');
}
});
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?我知道,提醒是错误的方式,但这不是问题.谢谢,迈克
似乎你的控制器没有错误.关键原因可能在于您的应用程序的另一部分,但是...好吧,根据我的经验:
painted
事件直截了当.每当你的视图真正在屏幕上呈现时,就会painted
激发.(注意:painted
事件在视图的子组件完全呈现之前触发.换句话说,painted
首先,DOM生成第二个.)
show
事件不一定会启动,尤其是对于视图的初始化时间.show
当你首先以某种方式隐藏你的视图并稍后显示它时,事件就会激起.
只是体验,可能是变体.但希望它可能对你有所帮助.
您无法在控制器中处理"绘制"事件,因为它没有冒泡到它.
来自sencha docs:此事件不可用于事件委派.相反,由于性能原因,如果您明确地向其添加至少一个侦听器,则"仅绘制"会触发.您可以通过在面板中定义侦听器来处理它.
Ext.define('MyApp.view.MyPanel', {
extend: 'Ext.Panel',
config: {
},
listeners: {
painted: function (element, options) {
console.log("I've painted");
}
}
});
Run Code Online (Sandbox Code Playgroud)
但'show'事件可以在控制器中处理.检查应用程序的另一部分是否看到该控制器.(您是否提供了控制器的参考?面板的ID是否正确?)