Extjs 覆盖messagebox并向默认按钮添加图标

Extjs 覆盖messagebox并向默认按钮添加图标,extjs,extjs4,extjs4.2,Extjs,Extjs4,Extjs4.2,这里有人知道如何覆盖messagebox来放置按钮图标吗?i、 e:检查图标是否为是/确定,交叉按钮是否为否,等等 我试图覆盖Ext.window.MessageBox的makeButton功能,但它似乎不起作用,甚至没有点击调试器: Ext.override(Ext.window.MessageBox, { makeButton: function (btnIdx) { debugger; var btnId = this.buttonIds[btnId

这里有人知道如何覆盖messagebox来放置按钮图标吗?i、 e:检查图标是否为是/确定,交叉按钮是否为否,等等

我试图覆盖
Ext.window.MessageBox的
makeButton
功能,但它似乎不起作用,甚至没有点击
调试器

Ext.override(Ext.window.MessageBox, {
    makeButton: function (btnIdx) {
        debugger;
        var btnId = this.buttonIds[btnIdx];
        return new Ext.button.Button({
            handler: this.btnCallback,
            itemId: btnId,
            scope: this,
            text: this.buttonText[btnId],
            minWidth: 75,
            iconCls: ['check', 'no', 'cancel', 'blah'][btnId]
        });
    }
});

从源代码中可以看到,
makeButton
方法是从
Ext.window.MessageBox
调用的

我假设您正在使用
Ext.MessageBox
(或
Ext.Msg
)单例实例来显示消息框。在创建
Ext.window.MessageBox
之后,立即在回调函数中创建此实例(请检查中的第三个参数)。这也意味着它发生在覆盖之前

因此,您可以直接覆盖singleton实例的按钮,如下所示:

Ext.Msg.msgButtons.ok.setIconCls(okBtnCls);
Ext.Msg.msgButtons.yes.setIconCls(yesBtnCls);
Ext.Msg.msgButtons.no.setIconCls(noBtnCls);
Ext.Msg.msgButtons.cancel.setIconCls(cancelBtnCls);
如果要通过创建类的新实例来显示消息框,也可以使用
makeButton
覆盖:

var myMsg = Ext.create('Ext.window.MessageBox', {
    closeAction: 'destroy'
}).show({
    title: 'Custom MessageBox Instance',
    message: 'I can exist along with Ext.Msg'
});

从源代码中可以看到,
makeButton
方法是从
Ext.window.MessageBox
调用的

我假设您正在使用
Ext.MessageBox
(或
Ext.Msg
)单例实例来显示消息框。在创建
Ext.window.MessageBox
之后,立即在回调函数中创建此实例(请检查中的第三个参数)。这也意味着它发生在覆盖之前

因此,您可以直接覆盖singleton实例的按钮,如下所示:

Ext.Msg.msgButtons.ok.setIconCls(okBtnCls);
Ext.Msg.msgButtons.yes.setIconCls(yesBtnCls);
Ext.Msg.msgButtons.no.setIconCls(noBtnCls);
Ext.Msg.msgButtons.cancel.setIconCls(cancelBtnCls);
如果要通过创建类的新实例来显示消息框,也可以使用
makeButton
覆盖:

var myMsg = Ext.create('Ext.window.MessageBox', {
    closeAction: 'destroy'
}).show({
    title: 'Custom MessageBox Instance',
    message: 'I can exist along with Ext.Msg'
});

正如@scebotari66所述,
Ext.Msg
Ext.MessageBox
Ext.window.MessageBox
的单例。因此,当您重写
Ext.window.MessageBox.makeButton
时,如果您对该类使用单例,则这将无效

但是,有一种方法可以将覆盖应用到
Ext.window.MessageBox
到singleton。猜怎么着

(drumroll)

坦坦塔南

Ext.MessageBox=Ext.Msg=new Ext.window.MessageBox()

是的,没错。您只需要在重写后重新分配singleton

因此:

下次调用
Ext.Msg.alert()
时,您的图标也会显示出来

我希望这对你有帮助


注意:iconCls
配置的顺序应该是
[确定,是,否,取消]
正如@scebotari66所述,
Ext.Msg
Ext.MessageBox
Ext.window.MessageBox
的单例。因此,当您重写
Ext.window.MessageBox.makeButton
时,如果您对该类使用单例,则这将无效

但是,有一种方法可以将覆盖应用到
Ext.window.MessageBox
到singleton。猜怎么着

(drumroll)

坦坦塔南

Ext.MessageBox=Ext.Msg=new Ext.window.MessageBox()

是的,没错。您只需要在重写后重新分配singleton

因此:

下次调用
Ext.Msg.alert()
时,您的图标也会显示出来

我希望这对你有帮助


注意:iconCls
配置的顺序应该是
[确定,是,否,取消]

我想
生成按钮
覆盖就可以了。。查看我的回答我认为
makeButton
覆盖就可以了。。如果你没有回答,我也看不见你拥有80%的信用:如果你没有回答,我也看不到。:)你拥有80%的信用:D