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