ExtJS 4.2.1中如何改变MessageBox默认按钮的位置

4
如果您使用带有默认按钮的代码:
Ext.Msg.show({
 title:'Save Changes?',
 msg: 'You are closing a tab that has unsaved changes. Would you like to save your changes?',
 buttons: Ext.Msg.YESNOCANCEL,
 icon: Ext.Msg.QUESTION
});

窗口上的按钮顺序为“是”、“否”、“取消”。为了保持应用程序的一致性,我希望它们的顺序为“取消”、“否”、“是”。是否有一种方法可以添加不同的配置或根据我的需求更改它?

3
你尝试使用了这个代码吗? {text: '取消', itemId: 'cancel'}, {text: '否', itemId: 'no'}, {text: '是', itemId: 'yes', ui: 'action'} ]``` 它包含三个按钮,分别为“取消”(Cancel)、“否”(No)和“是”(Yes)。其中,“是”(Yes)的按钮样式为操作性(action)。 - bunkdeath
1个回答

8

默认按钮仅使用Ext.window.MessageBox.makeButton()私有方法基于Ext.window.MessageBox.buttonIds配置进行创建,并根据位掩码 buttons: Ext.Msg.YESNOCANCEL 显示 / 隐藏。

因此,我们只需要覆盖 buttonIds 配置和位掩码:

    Ext.define('Ext.overrides.MessageBox', {
        override: 'Ext.window.MessageBox',

        OK: 1,           //0001
        CANCEL: 2,       //0010
        NO: 4,           //0100
        YES: 8,          //1000

        OKCANCEL: 3,     //0011
        YESNO: 12,       //1100
        YESNOCANCEL: 14, //1110

        buttonIds: [
            'ok', 'cancel', 'no', 'yes'
        ]
    });

Ext.Msg / Ext.MessageBox是单例模式,并且在我们的覆盖之前被定义为Ext.window.MessageBox的实例(请查看Ext.MessageBox代码的最后几行)。

因此,我们还需要覆盖Ext.Msg / Ext.MessageBox

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

请查看这个简单的示例


我们可以使用配置文件来替代覆盖已提供的按钮集合。请参考我在原问题中的评论。 - bunkdeath
1
@bunkdeath,如果我们想在整个应用程序中使用此按钮顺序-最好进行覆盖。 - Sergey Novikov
是的。重新阅读问题后,我觉得覆盖重写对开发很有好处,因为它们在应用程序中有一定的顺序。(y) - bunkdeath
但是覆盖方法存在一个严重的问题...它会影响其他按钮的对齐。 - Surya Prakash Tumma
尝试使用剩余的按钮Ext.MessageBox.OKCANCEL,Ext.MessageBox.YESNO,按钮将更改,请查看我的演示 https://fiddle.sencha.com/#view/editor&fiddle/1sbn - Surya Prakash Tumma
@surya-prakash-tumma 确实!忘记更新位掩码了。请检查更新。 - Sergey Novikov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接