游乐游手机版
首页/前端开发/文章详情

EXT窗口与对话框MessageBox详解

时间:2026-06-15 07:00
Ext Window可创建可拖拽、最大化及还原的窗口,通过Ext WindowGroup进行分组管理,提供bringToFront、sendToBack等丰富的层级控制方法。Ext MessageBox封装了alert、confirm、prompt等美化风格的对话框,通过回调函数参数获取用户点击的按钮及输入内容,支持完全自定义按钮与图标样式。

复制代码 代码如下:


var i=0;
function newWin(){
var win = new Ext.Window({
title:"窗口"+i++,
width:400,
height:300,
maximizable:true
});
win.show();
}
Ext.onReady(
function(){
Ext.get("btn").on("click",newWin);
}
);

页面中的 HTML 内容:
当执行上述代码后,点击“新窗口”按钮,页面会显示一个标题为“窗口x”的浮动窗口。该窗口支持关闭和最大化操作,点击最大化按钮可将窗口铺满屏幕,再次点击即可还原至原始大小,具体效果如下图所示。

ExtJS 窗口分组管理

窗口在 ExtJS 中是按组进行管理的。通过分组,可以统一操控一组窗口,例如将最前面的窗口移动到底层,或者一次性隐藏所有窗口。默认情况下,所有窗口归属于默认组 Ext.WindowMgr。如果你需要自定义分组,可以使用 Ext.WindowGroup 类,该类提供了 bringToFrontgetActivehideAllsendToBack 等方法,便于灵活控制组内窗口的层级关系和可见性。

以下示例演示了如何创建自定义窗口组并操作它们:

复制代码 代码如下:


var i=0,mygroup;
function newWin(){
var win=new Ext.Window({
title:"窗口"+i++,
width:400,
height:300,
maximizable:true,
manager:mygroup
});
win.show();
}
function toBack(){
mygroup.sendToBack(mygroup.getActive());
}
function hideAll(){
mygroup.hideAll();
}
Ext.oReay(
function(){
mygroup=new Ext.WindowGroup();
Ext.get("btn").on("click",newWin);
Ext.get("btnToBack").on("click",toBack);
Ext.get("btnHide").on("click",hideAll);
}
);

页面中的 HTML 代码:
执行后,先多次点击“新窗口”按钮,页面中会显示多个窗口容器。你可以拖动这些窗口,将它们放置在屏幕的不同位置。随后点击“放到后台”按钮,可将最前面的窗口移至该组窗口的最底层;点击“隐藏所有”按钮,则能隐藏当前打开的全部窗口。效果如下图所示:

ExtJS 对话框组件应用

传统的 alertconfirm 对话框样式简陋,常常与精致的页面风格不协调。ExtJS 提供了一套美观的对话框组件,封装在 Ext.MessageBox 类中,其简写为 Ext.Msg,两种写法均可。下面演示一个最简单的 alert 对话框示例:

复制代码 代码如下:


Ext.onReady(
function(){
Ext.get("btnAlert").on(
"click",
function(){
Ext.MessageBox.alert("请注意","这是ExtJS的提示框");
}
);
}
);

Html 页面中的内容:
运行程序后,点击“alert框”按钮,页面将弹出如下图所示的对话框。

除了 alert,ExtJS 还提供了 confirmpromptprogresswait 等多种对话框类型,你也可以通过 show 方法进行自定义。大部分对话框都接受四个参数:标题 title、提示信息 msg(这两个为必填项)、回调函数 fn(可选,在用户关闭对话框后执行)、作用域 scope(可选,用于指定回调函数中的 this 值)。回调函数包含两个参数:button(表示用户点击的按钮)和 text(如果对话框包含输入框,则返回输入的内容)。通过这些参数,你可以判断用户是确认还是取消,或者获取用户输入的信息。

下面是一个 confirm 对话框的示例:

复制代码 代码如下:


Ext.onReady(
function(){
Ext.get("btn").on(
"click",
function(){
Ext.MessageBox.confirm(
"请确认","是否真的要删除指定的内容",
function(button,text){
alert(button);
alert(text);
}
);
}
);
}
);

Html 内容:

点击对话框按钮后,会弹出如下对话框。选择 yes 或 no 后,传统提示框将输出回调函数中 button 和 text 参数的内容。

在实际应用中,你通常需要根据用户的选择执行不同的逻辑,而不仅仅是显示一个 alert。例如:

复制代码 代码如下:


Ext.onReady(
function(){
Ext.get("btnAlert").on(
"click",
function(){
Ext.MessageBox.confirm(
"请确认",
"是否真的要删除指定的内容",
function(button,text){
if(button=="yes"){
//执行删除操作
alert("成功删除");
}
}
);
}
);
}
);

这样,当用户点击对话框中的 yes 按钮时,就会执行相应的操作(例如删除);如果选择 no,则忽略操作。

接下来看 prompt 输入框对话框——允许用户输入内容,并根据点击的按钮进行相应处理:

复制代码 代码如下:


Ext.onReady(
function(){
Ext.get("btn").on(
"click",
function(){
Ext.MessageBox.prompt(
"输入提示框",
"请输入你的新年愿望:",
function(button,text){
if(button=="ok"){
alert("你的新年愿望是:"+text);
}
else
alert("你放弃了录入!");
}
);
}
);
}
);

Html 页面:
点击“对话框”按钮将显示下图所示内容。点击 OK 按钮会输出你输入的文本,点击 cancel 按钮则提示已放弃输入,效果如下图所示:

如果需要更灵活的对话框——例如包含多个按钮、自定义图标或进度条——可以直接使用 Ext.Msg.show 方法。下面是一个“保存数据”的确认对话框示例,包含 Yes、No、Cancel 三个按钮,并使用问号图标:

复制代码 代码如下:


function sa ve(button){
if(button=="yes"){
//执行数据保存操作
}
else if(button=="no"){
//不保存数据
}
else{
//取消当前操作
}
}
Ext.onReady(
function(){
Ext.get("btn").on(
"click",
function(){
Ext.Msg.show({
title:'保存数据',
msg: '你已经作了一些数据操作,是否要保存当前内容的修改?',
buttons: Ext.Msg.YESNOCANCEL,
fn: sa ve,
icon: Ext.MessageBox.QUESTION
});
}
);
}
);

点击“对话框”按钮将显示一个自定义的保存数据对话框,包含 yes、no、cancel 三个按钮。你可以在回调函数 sa ve 中根据点击的按钮执行相应的操作,效果如下图所示:

来源:https://www.jb51.net/article/26131.htm
上一篇开源印迹工具生成徒步轨迹3D地形模型 下一篇ExtJS表单隐藏字段value赋值无效问题处理技巧
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Vue应用中异步更新性能问题的优化策略详解
前端开发 · 2026-07-03

Vue应用中异步更新性能问题的优化策略详解

先来看一个令许多开发者感到困惑的场景:明明修改了数据,DOM 却“毫无反应”,无法获取最新的高度,也无法计算正确的坐标。这并非 Vue 的缺陷,反而是它精心设计的性能优化策略。核心在于——你需要学会与它“异步更新”的特性协作,而非硬碰硬。 所谓的“异步更新性能问题”,本质上是一种认知偏差。Vue 的

如何避免原型对象挂载大体积动态数组内存污染
前端开发 · 2026-07-03

如何避免原型对象挂载大体积动态数组内存污染

原型链上的大数组:一个隐蔽的内存冲击波 先给个核心判断:直接在原型对象上挂载一个大体积动态数组,这既不是传统意义上的内存“污染”,也不是安全漏洞那种“污染”,而是一种相当隐蔽但后果严重的内存管理失当。它会导致所有实例共享同一份数据,而且正因为生命周期跟整个原型链绑定得太紧,垃圾回收器(GC)根本看不

利用堆栈信息精准定位显式绑定错误对象致未定义异常
前端开发 · 2026-07-03

利用堆栈信息精准定位显式绑定错误对象致未定义异常

深入追踪:显式绑定传错对象引发的未定义异常 说实话,这类问题在JavaScript开发中相当常见——显式绑定传错了对象,然后方法执行时静默失败、访问undefined、或者抛出TypeError。但真正的难点不在于“报了什么错”,而在于“到底是哪个对象被绑错了”。要解决它,需要跳出堆栈的表层报错信息

ES模块中默认导出和具名导出的执行上下文
前端开发 · 2026-07-03

ES模块中默认导出和具名导出的执行上下文

export default 与具名导出在 ES Module 中的行为机制截然不同,核心差异不在于“值如何传递”,而在于绑定如何建立以及导入时如何使用。先给出总结性结论,再逐一详细拆解。 export default 是一种语法糖,而非真正的变量声明 这种设计容易引起误解。实际上,export d

详解HTML中iframe标签loading=lazy属性实现嵌入内容懒加载方法
前端开发 · 2026-07-03

详解HTML中iframe标签loading=lazy属性实现嵌入内容懒加载方法

先聊聊 loading= "lazy " 这个属性——它本意是让 iframe 实现延迟加载,但实际落地时常常“失效”。这并非程序漏洞,而是浏览器内置的防御机制:只有所有条件同时触发,它才会真正推迟资源请求。比如 src 必须是跨域地址(类似 https: widget example com emb