Sencha Touch 2事件:画vs秀?

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)

为什么这不起作用?我知道,提醒是错误的方式,但这不是问题.谢谢,迈克

Thi*_*yen 9

似乎你的控制器没有错误.关键原因可能在于您的应用程序的另一部分,但是...好吧,根据我的经验:

  • painted事件直截了当.每当你的视图真正在屏幕上呈现时,就会painted激发.(注意:painted事件在视图的子组件完全呈现之前触发.换句话说,painted首先,DOM生成第二个.)

  • show事件不一定会启动,尤其是对于视图的初始化时间.show当你首先以某种方式隐藏你的视图并稍后显示它时,事件就会激起.

只是体验,可能是变体.但希望它可能对你有所帮助.


Dmy*_*kin 6

无法在控制器中处理"绘制"事件,因为它没有冒泡到它.

来自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是否正确?)