Sencha touch Sencha Touch 2活动:绘画vs表演?

Sencha touch Sencha Touch 2活动:绘画vs表演?,sencha-touch,sencha-touch-2,Sencha Touch,Sencha Touch 2,我有一个关于show事件的问题。 在我的应用程序中,我正在处理面板的绘制事件,如下所示: Ext.define('mvcTest.controller.Test', { extend: 'Ext.app.Controller', config: { refs: { panel: '#testpanel' }, control:{ panel: { painted

我有一个关于
show
事件的问题。 在我的应用程序中,我正在处理面板的
绘制事件,如下所示:

Ext.define('mvcTest.controller.Test', {
    extend: 'Ext.app.Controller',
    config: {
    refs: {
            panel: '#testpanel'
    },
    control:{
                panel: {
                    painted: 'onPainted'        
                }
        }
    },
    onPainted: function(){
        alert('painted');
    }
});
docu说,还有一个“表演”活动,但根本没有被炒鱿鱼:

Ext.define('mvcTest.controller.Test', {
    extend: 'Ext.app.Controller',
    config: {
    refs: {
            panel: '#testpanel'
    },
    control:{
                panel: {
                    show: 'onShow'        
                }
        }
    },
    onShow: function(comp, obj){
        alert('show');
    }
});
为什么这不起作用? 我知道,提醒是错误的,但这不是问题所在。 谢谢
mike

无法处理控制器中的“绘制”事件,因为它没有向上冒泡

来自sencha文档:此事件不可用于事件委派。取而代之的是,由于性能原因,只有当您明确地向其添加至少一个侦听器时,“绘制”才会触发。 您可以通过在面板中定义侦听器来处理它

Ext.define('MyApp.view.MyPanel', {
  extend: 'Ext.Panel',
  config: {
  },
  listeners: {
    painted: function (element, options) {
      console.log("I've painted");
    }
  }
});
但“show”事件可以在控制器中处理。检查应用程序的其他部分是否看到该控制器。
(您是否提供了控制器的参考?面板的id是否正确?

您的控制器似乎没有错误。关键原因可能在于你申请的另一部分,但。。。好的,根据我的经验:

  • 直接绘制事件。每次在屏幕上真正呈现视图时,
    painted
    就会启动。(注意:
    painted
    事件在视图的子组件完全呈现之前激发。换句话说,
    painted
    第一,DOM生成第二。)

  • show
    事件不一定会触发,尤其是在视图初始化时
    show
    事件是当您首先以某种方式隐藏视图,然后稍后显示视图时触发的事件


只是经验,可能是变数。但希望它能对您有所帮助。

我知道这是一条旧线索,但有人可能会发现它很有用: Sencha最初不会启动“show”和“Paint”活动。 你需要先触发它

使用此代码段可侦听来自控制器的事件:

Ext.define('MyApp.view.MyPanel', {
  extend: 'Ext.Panel',
  config: {
  },
  listeners: {
    painted: function (element, options) {
      this.fireEvent('painted', [element, options])
    }
  }
});

1) 你是否在app.js中包含了控制器?是的,如果没有它,第一个版本将无法工作。因此“绘制”事件正在工作,但“显示”不起作用?不是只有在组件上调用show()方法时才会触发show吗?是的,绘制工作正常!我不知道,当节目开播时,文档中没有任何信息。啊,好的,谢谢。但是为什么我可以在控制器中处理绘制的事件呢?面板的id是正确的,参考资料似乎都是正确的。控制器将初始化,…这是离题的,但是:我需要15个声誉才能得到+1,或者说+1是什么意思?;)也许他完全同意这个答案。对不起,我确实不知道。因为绘制的
,实际上可以在控制器中进行事件注册。若要
显示
事件,它也必须可用。但问题是:为什么
painted
有效,而
show
无效?只是评论一下。答案是否定的。另外,不要依赖ST2文档。这是愚蠢的。仅从实际代码行中获取exp。根据我的经验,以及文档和文档中的其他注释,
绘制的
在控制器中不可用。好的,这个问题的原因是:当视图显示给用户时,我想执行ajax请求。响应是一个json对象,它是视图组件的模型。也就是说,画画是一条路吗?show event:我认为当组件显示给用户并且所有子组件都被完全渲染时,show是默认事件。对于
painted
event,您是对的。对于
show
event:正如我所说,当视图“更改其状态”从隐藏变为可见时,它将触发。因此,当视图和子视图未完全渲染时,
show
(甚至
painted
)事件可能会被触发。希望足够清楚啊,好的,我明白了。。我分析了“面板开关”上的html。面板将隐藏为“显示:无”。当我切换回时,它被阻塞,因此不会触发show事件。显示事件指css“可见性”?