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

ExtJS中两个tbar常见问题解析

时间:2026-06-10 07:01
通过自定义工具栏与监听器,在ExtJSPanel的tbar上分离摆放操作按钮和查询条件,利用render事件将查询工具栏动态渲染到自带工具栏,减少界面冗余、提升交互流畅性,实现用户体验优化。

ExtJS 面板工具栏与查询条件分离布局的优雅实现方案

熟悉 ExtJS 的开发者都清楚,每个 Panel 组件都内置了 tbar(顶部工具栏)与 bbar(底部工具栏)。在设计查询页面时,我们通常需要呈现一个数据表格,并搭配操作按钮(例如“添加”),再加上用于快速检索数据的查询条件。如果用 Java 或普通 HTML 来实现,只需三个 table 或三个 div 即可轻松搞定。那么使用 ExtJS 呢?其实同样简单——利用 Grid 组件展示数据,通过 Button 组件放置操作按钮,而查询条件也能直接嵌入同一个 toolbar 中。功能虽能实现,但用户体验是否理想?

客户体验始终是第一位,最朴素的策略就是把操作流程设计得尽可能简单:用户只需点击、无需思考。就像傻瓜相机、一键安装系统一样,越简单越受欢迎。因此,为了达到“信达雅”的效果,如何将操作按钮与查询搜索条件分别放置到两个不同的工具栏上呢?网上虽有代码能在 Grid 中增加两个 tbar,但对于项目即将上线的新手来说,有一种更简便的方法同样能实现“信达雅”——借助 listeners 监听器。

具体实现思路分为三步:

  • 第一步:将执行按钮(如“添加”按钮)放置在 Panel 自带的 tbar 上。
  • 第二步:自定义一个独立的工具栏,在此工具栏上放置查询搜索条件。
  • 第三步:让自定义工具栏监听 Panel 自带的 tbar,即通过监听器将自定义工具栏渲染到自带工具栏上。

核心代码仅需两行关键逻辑:

tbar: new Ext.Toolbar({items:['-']}),
// 把查询工具栏写在按钮工具栏下面
listeners: {
    render: function(){
        queryBar.render(this.tbar);
    }
}

以下是我们项目中的实际代码片段,可直接参考使用:

mnguser.panel = new Ext.Panel({
    id :'mngmenuDiv',
    title : '用户管理',
    region : 'center',
    layout : 'fit',
    style : 'padding:3px;',
    bodyBorder : true,
    border : true,
    items : _grid,
    tbar:new Ext.Toolbar({items:['-']}),
    // 把查询工具栏写在按钮工具栏下面
    listeners: {
        render: function(){
            queryBar.render(this.tbar);
        }
    }
});

mnguser.body = Ext.extend(Ext.Viewport, {
    layout : 'border',
    initComponent : function() {
        this.content = mnguser.panel;
        menuOpt(this.content); // 在自带tbar上添加执行按钮
        Ext.apply(this, {
            items : [this.content]
        });
        mnguser.body.superclass.initComponent.call(this);
    }
});

最终效果如下图所示(示意):

工具栏效果图

来源:https://www.jb51.net/article/40410.htm
上一篇ExtJS4获取Grid修改后数据的方法 下一篇ExtJS 3.0 CheckboxGroup动态添加选项的实现方法
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

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

同类最新

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

更多
HTML文档版权声明结构与基础脚手架代码质量解析
前端开发 · 2026-07-07

HTML文档版权声明结构与基础脚手架代码质量解析

版权声明需用语义化``标签,©符号使用`©`实体;年份通过服务端、构建或JS分层兜底;`rel= "license "`仅指向真实许可证文件才有效。

基于HTML模板的组件化全栈交互方案
前端开发 · 2026-07-07

基于HTML模板的组件化全栈交互方案

纯HTML模板仅作静态结构,全栈交互需后端注入数据、前端JS激活模板及用户事件触发双向链路。``标签惰性,不执行脚本或加载资源,需通过克隆填充数据并手动绑定事件实现交互,父子传值依赖JS对象与自定义事件。

Bootstrap修改Badge徽章边框为圆点样式的方法
前端开发 · 2026-07-07

Bootstrap修改Badge徽章边框为圆点样式的方法

将BootstrapBadge改为圆点:自定义类设置等宽高、border-radius:50%、padding:0、font-size:0;Bootstrap5 2+需加display:inline-block;注意垂直对齐,避免min-width干扰,背景色用background-color更可控。

Bootstrap响应式多栏Footer社交图标排版实现
前端开发 · 2026-07-07

Bootstrap响应式多栏Footer社交图标排版实现

使用Bootstrap5的grid系统实现响应式多栏Footer,按断点设置列宽;以FontAwesome处理社交图标,避免使用img;利用list-unstyled组织链接列表;借助flex-column容器配合mt-auto使版权行自动贴底,避免fixed-bottom固定定位的弊端。

如何用Shadow DOM隔离组件内外事件分发
前端开发 · 2026-07-07

如何用Shadow DOM隔离组件内外事件分发

ShadowDOM内部事件默认不穿透影子边界,需显式设置composed:true才能被外部监听。此时event target指向宿主元素,真实触发源需通过event composedPath()[0]获取。原生事件手动派发时也必须声明composed:true。应避免在宿主上依赖event target做逻辑分支,建议在shadowroot内绑定事件或使用