1

从 Ext5 升级到 7.2 后,以编程方式启用按钮后不再可能看到工具提示。

Ext.define('X', {
extend: 'Ext.panel.Panel',

initComponent: function() {
    this.tbar = [{
        text: 'Foo',
        disabled: true,
        itemId: 'fooBtn',
        tooltip: 'FooTip',
        handler: function(btn){
            this.setHtml('Test')
        },
        scope: this
    },
    {
        text: 'Bar',
        tooltip: 'BarTip',
        handler: function(btn) {
            this.down('#fooBtn').enable();
        },
        scope: this
    }];
    this.callParent();
}
});

Ext.application({
name: 'Fiddle',

launch: function() {
    new X({
        renderTo: document.body,
        title: 'Foo',
        width: 200,
        height: 200
    });
 }
});

https://fiddle.sencha.com/#view/editor&fiddle/37o5

4

2 回答 2

0

您可以尝试启用后添加一行:

handler: function(btn) {
            this.down('#fooBtn').enable();
    ******this.down('#fooBtn').setTooltip("FooTip");*****
        },

也许是一个糟糕的解决方案,但需要更少的代码。

于 2020-08-04T09:29:28.853 回答
0

奇怪的虫子。您可以使用以下覆盖来修复它:

Ext.define('overrides.button.Button', {
    override: 'Ext.button.Button',
    
    setTooltip: function(tooltip, initial) {
        var me = this,
            targetEl = me.el;

        if (me.rendered) {
            if (!initial || !tooltip) {
                me.clearTip();
            }
 
            if (tooltip) {
                if (Ext.quickTipsActive && Ext.isObject(tooltip)) {
                    Ext.tip.QuickTipManager.register(Ext.apply({
                        target: targetEl.id
                    }, tooltip));
 
                    me.tooltip = tooltip;
                }
                else {
                    targetEl.dom.setAttribute(me.getTipAttr(), tooltip);
                }
 
                me.currentTooltipEl = targetEl;
            }
        }
        else {
            me.tooltip = tooltip;
        }
 
        return me;
    }
});
于 2020-08-03T19:07:40.510 回答