现象:当用户加载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();
}
只需要在中文包里重新生成下该对象即可
例如:
我的代码:
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);
},这样写就可以了

本文介绍了一种解决ExtJS中提示框按钮显示为英文而非中文的问题的方法。通过修改MessageBox原型,确保即使在加载中文包之后,也能正确显示中文按钮。

1087

被折叠的 条评论
为什么被折叠?



