Sencha Touch 2事件:画vs秀?

时间:2012-06-03 19:12:41

标签: 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');
    }
});
文件记录说,还有一个“节目”事件,但它根本没有被解雇:

Ext.define('mvcTest.controller.Test', {
    extend: 'Ext.app.Controller',
    config: {
    refs: {
            panel: '#testpanel'
    },
    control:{
                panel: {
                    show: 'onShow'        
                }
        }
    },
    onShow: function(comp, obj){
        alert('show');
    }
});

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

3 个答案:

答案 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])
    }
  }
});