extjs提示框MessageBox汉化bug

来源:岁月联盟 编辑:exp 时间:2012-10-16

目的:是Ext的提示框使用中文按钮

现象:当用户加载ext中文包,但是Ext.MessageBox ,Ext.Msg的时候依然是英文的button


源码: Ext.MessageBox = Ext.Msg = new this();


    if(Ext.MessageBox){
        Ext.window.MessageBox.prototype.buttonText = {
            ok: "确定",
            cancel: "取消",
            yes: "是",
            no: "否"
        };
    }

结论:综合分析后就不难得出,因为Ext.MessageBox = Ext.Msg全局对象已经在导入中文包之前已就已经生成了,所以后来的中文包就无法作用了(这里做一个猜测,没有去验证有兴趣的人可以自己验证了,虽然源代码是修改了该类的prototype对象,但是实例化的对象不是直接调用该值去生成弹出窗口,而是实例化对象的时候已经把该buttonText参数闭包给某些方法了)
解决方案:

if(Ext.MessageBox){
        Ext.window.MessageBox.prototype.buttonText = {
            ok: "确定",
            cancel: "取消",
            yes: "是",
            no: "否"
        };
        Ext.MessageBox = Ext.Msg = new Ext.window.MessageBox();
    }

只需要在中文包里重新生成下该对象即可

例如:

我的代码:

[javascript] 
onLogout: function () { 
   //为了提示中文,只能把源码更改,因为ext的汉化包有个bug,直接调用不好 
     Ext.window.MessageBox.prototype.buttonText = { 
                ok: "确定", 
                cancel: "取消", 
                yes: "是", 
                no: "否" 
     }; 
     Ext.MessageBox = Ext.Msg = new Ext.window.MessageBox(); 
     Ext.Msg.confirm('系统提示','您真的要退出系统?',function(btn){ 
            if(btn=='yes'){ 
                 window.location.href="/gwater/common/userlogin.action";                     
            }else{ 
               
            } 
             
    },this); 
       
   },