在 Sencha Touch 上收听 enable/disable 事件

Listen to enable/disable events on Sencha Touch

我需要在容器上收听 enable/disable 事件,但我注意到没有此类事件。我试过听它以防文档中没有提到它,但它肯定不存在。

我用谷歌搜索了一下,发现了这个..

Ext.define('My.Custom.Container',{
    extend:'Ext.Container',
    onEnable:function(){
        console.log("it's listening");
    }
});

看起来很有希望,但根本行不通。

有什么办法可以监听这些事件吗?我不想让 jQuery 混在这里,因为这太过分了。

好的,我刚刚找到问题的答案。

Ext.define('My.custom.Container',{
   extend:'Ext.Container',
   config:{
      ....config....
   },
   enable: function(){
       this.callParent(arguments);
       // do something else;
   },
   disable: function(){
      this.callParent(arguments);
      // do something else;
   }
});

我仍然很好奇是否有其他解决方法。所以仍然欢迎回答。

许多组件从中继承方法的 container xtype 确实有一个事件,该事件会在其 disabled 状态发生变化时触发。此事件称为 disabledchange 并在每次容器为 enabled/disabled.

时触发

在下面的代码中,我们可以看到它在 button 上的运行,纯粹是因为它提供了视觉上更好的演示(因为您可以立即看到状态),但它继承了完全相同的方法和事件容器。

Ext.application({
    name: 'Fiddle',

    launch: function() {
        Ext.Viewport.add({
            xtype: 'container',
            padding: 10,
            items: [{
                xtype: 'button',
                text: 'Button To be disabled/enabled',
                listeners: {
                    disabledchange: function(button, value, oldValue, eOpts) {
                        console.log('changing my disabled state to ' + value);
                    }
                }
            }, {
                xtype: 'button',
                text: 'click to disable/enable above button',
                listeners: {
                    tap: function() {
                        var isButtonDisabled = Ext.Viewport.query('button')[0].getDisabled();
                        Ext.Viewport.query('button')[0].setDisabled(!isButtonDisabled);
                    }
                }
            }]
        });
    }
});

演示:https://fiddle.sencha.com/#fiddle/g46