extjs4 用Ext.create()创建MessageBox时,提示‘buttons为空或不是对象’

用Ext.MessageBox.show()则不会出现这个问题vargrid=Ext.create('Ext.window.MessageBox',{title:'Sav... 用Ext.MessageBox.show()则不会出现这个问题
var grid = Ext.create('Ext.window.MessageBox', {
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,
autoShow:true
});
展开
 我来答
晴绚如光1X
2012-03-13 · TA获得超过182个赞
知道答主
回答量:72
采纳率:0%
帮助的人:57.6万
展开全部
注意,Ext.window.MessageBox是单例的,跟java里的单例模式一样,直接使用就可以,没有createde的,例如:
Ext.Msg.alert('Status', 'Changes saved successfully.');
看一下api,Ext.window.MessageBox前面有个图标,带有那个图标的都是单例的!

他的api有说明,MessageBox可以模拟alert,prompt等简单的弹出窗口,配置参数有限,如果要用复杂的,可以使用show方法!
更多追问追答
追问
上面没有写Ext.window.MessageBox是单例,Ext.MessageBox是它的单例。
追答
Ext.window.MessageBox是一个类,单例的类,Ext.MessageBox是他的实例对象,可以简写为Ext.Msg。
搞清类和对象的关系!你create一百遍Ext.window.MessageBox,实例还是那一个!

我说的这个的意思是:Ext.window.MessageBox一般不会让你来create,也没有那么写的!

当然你可以create,java里叫new,但是你应该知道单例模式的实现原理,他的构造方法是私有的,不是你能直接实例化,如果你能直接随便的实例化,那怎么能是单例呢!单例模式必须由他自己实例化了把唯一的实例返回给你用!说白了,他的实例化方法就是show方法!也就是说,他的public方法show里调用了自己的构造方法,返回值就是Ext.MessageBox。你要传更多的属性,ext里叫配置参数,只能传递给show方法,show方法调用私有构造方法的时候会传递给他!

这样说你明白了吗?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式