`

TabPanel、TreePanel、GridPanel几种布局方式常见的小问题

 
阅读更多
TabPanel
1、当tab标签超过一定浏览器的宽度时,使之自动加载滚动条autoScroll:true;
设置滚动条为自动,此前若需要看到效果必须要设置enableTabScroll属性为真
2、添加右键菜单
      使用extjs的右键组件TabCloseMenu
{
                xtype:'tabpanel',
                id:'tabs',
                autoScroll:true,
                region:'center', // a center region is ALWAYS required for border layout
                deferredRender:false,
                activeTab:0, // first tab initially active
                items:centPortal,
                plugins:new Ext.ux.TabCloseMenu({
                    closeTabText:'关闭当前标签',
                    closeOtherTabsText:'关闭其他标签',
                    closeAllTabsText:'关闭所有标签'
                })
}
 
3、从iframe中操作父界面
      3.1、如果是得到,则直接使用parent.Ext.getCmp();或者是parent.变量名
      3.2、如果是添加一个组件到父容器,则需要在新建 new parent.Ext.panel();
 
GridPanel
1、本地数据分页
2、后台交互分页
//数据显示的表格
      var tabs = new Ext.grid.GridPanel({
          region:'center',
          title:'学生信息列表',
          width:750,
          height:400,
          margins:{top:5,right:0,bottom:0,left:50},
          cm:cm,
          store:store,
          bbar: new Ext.PagingToolbar({
              pageSize:15,
              store:store,
              displayInfo:true,
              displayMsg:'显示第{0}条到第{1}条记录,总共有{2}条记录',
              emptyMsg:'当前还没有记录'
          }),
          sm:sm
      });
      store.load({params:{start:0,limit:15}});
//这里的start,和limit就是用来分页的两个参数

3、gridpanel中对前台数据格式转换(渲染):
 3.1、在列模型中转换数据格式(不会改变store中实际值)
   renderer的配置参数有:value, metaData, record, rowIndex, colIndex, store
//一般情况下的渲染,用于根据类型判断显示文字信息
{header :'日志类型',dataIndex:'userLogType',width:150,renderer:function(value){
                    return value==1?'系统日志':'用户日志'
                }}

//这个渲染是会在鼠标滑过单元格时,弹出提示框显示该单元格信息
renderer:function(){
                return '<div ext:qtip='+val+'></div>';
            }

//主要用于该列的自动换行显示
renderer:function (v, meta) {
   meta.attr = 'style="white-space:normal;"';
   return v;
}
     
 3.2、在store中转换数据格式(改变了store中的值)
{name: 'rating', type: 'int', convert: function(v, rec) {
                   if (rec[3] < 0) return 2;
                   if (rec[3] < 1) return 1;
                   return 0;
               }
            }
  
 3.3、在gridpanel中渲染该函数,用来鼠标指定的列显示缩略图
function thumbnail(data, metadata, record, rowIndex, columnIndex, store) {
        var url = store.getAt(rowIndex).get('filePath');
       //var fileName = store.getAt(rowIndex).get('fileName');
        //qtitle标题 qtip:内容
        var img = "<img src='<%=WebConfig.WEB_DOWNLOAD%>/" + url + "' width='100%' >";
        var displayText = '<div ext:qtitle="图片信息" ext:qtip="' + img + '" >' + data + '</div>';
        return displayText;
    }
 
4、在后台排序
当使用后台排序时,需要注意的是使用的请求方式需要时proxy形式而不是url的形式,然后开启remoteSort为true,此时如果gridpanel中的该列允许排序的话,后台就会接收到相应的排序参数,分别为sort、dir
 
treePanel
1、树节点的attributes属性
ext的treePanel中有一个attributes属性,他是一个包含后台赋予的值的对象,后台的必须参数有Id(表示该节点)、text(节点名称)
注意:后如果想要从后台传递其他参数给这个树节点,那么只需呀附加Id、text之外的键值对即可,不需要将该键值对再次封装在attributes属性中
2、生成一棵树
function newTree(rVisible)
    {
        var tree = new Ext.tree.TreePanel({
            animate:true,//是否有动画效果
            useArrows:false,//是否有下三角
            lines:false,//是否显示树的那根线
            autoScroll:true,
            rootVisible: rVisible,//是否显示树的根节点(当树的值是后台传过来的时候,系统会自动加载一个根节点,然后将闯过来的数据作为子节点载入)
            loader: new Ext.tree.TreeLoader(),//树的节点的加载器,用来自动组装一棵树,等价于:dataUrl:'**.**'
            root:new Ext.tree.AsyncTreeNode(),//树的根节点
            containerScroll: true,//为树加载滚动条
            enableDD:true,//设置树是否可以拖拽,默认为false
            border: false,
            width: 250,
            height: 300,
            enableDD:true,
            listeners: {    //树的监听器,监听当树的节点的选项改变时触发
                'render': function(tp){
                    tp.getSelectionModel().on('selectionchange', function(tree, node){
if(node.isLeaf) alert("I'm Leaf"); else alert("I'm root');
                        }
                    })}
            }
listeners: {    //监听树节点的单击事件
                'render': function(tp){
                    tp.on(click, function(node,e){
if(node.isLeaf) alert("I'm Leaf"); else alert("I'm root');
                        }
                    })}
            }
        })
 
        return tree;
    }
 
3、根据后台传的值构建一棵树
        tree.getLoader().dataUrl = '  ';
//取值的url,传过来的值是一个json对象的数组[{id:'1',text:'a',leaf:true},{id:'2',text:'b',children:[{text:'2.1',leaf:true}]}]
        或者在构建树的时候,直接指定属性dataUrl
        tree.root.reload();//刷新树结构
4、前台确定一棵树
var entTree = newTree(true);
    var entBase = new Ext.tree.AsyncTreeNode({
        text:'企业基本信息',
        draggable:false,
        id:'entBase',
        children:[{
            text:'企业基本信息',
            iconCls:'nav',
            draggable:false,
            id:'entMsg',
            leaf:true
        },{
            text:'企业规章制度',
            iconCls:'nav',
            draggable:false,
            id:'entRule',
            leaf:true
        }]
    })
    entTree.setRootNode(entBase);//设置树的根节点
    entTree.expand(true,true);//设置树是否展开、是否有动态效果
 5、树的右键菜单配置方式
contextMenu:new Ext.menu.Menu({
            items:[
                {
                    id:'refresh-node',
                    text:'刷新',
                    iconCls:'silk-table-refresh'
                },
                {
                    id:'show-node',
                    text:'查看详情',
                    iconCls:'silk-table-go'
                },
                {
                    id:'add-node',
                    text:'新增信息',
                    iconCls:'silk-table-row-insert'
                },
                {
                    id:'edit-node',
                    text:'修改信息',
                    iconCls:'silk-table-edit'
                },
                {
                    id:'delete-node',
                    text:'删除信息',
                    iconCls:'silk-table-row-delete'
                }
            ],
            listeners:{
                itemclick:function (item) {
                    switch (item.id) {
                        case 'refresh-node':
                            refresh();
                            break;
                        case 'show-node':
                            show(this);
                            break;
                        case 'add-node':
                            add(this);
                            break;
                        case 'edit-node':
                            edit(this);
                            break;
                        case 'delete-node':
                            del();
                            break;
                    }
                }
            }
        })
写完右键菜单后,还要在树的监听器里设置
contextmenu:function (node, e) {
                node.select();
                var c = node.getOwnerTree().contextMenu;
                c.showAt(e.getXY());//设置坐标
            }
 
 
分享到:
评论

相关推荐

    ExtJs GridPanel双击事件获得双击的行

    在ExtJs中,GridPanel是用于展示数据的常用组件,它可以提供丰富的功能,如排序、分页、筛选等。在实际应用中,我们经常需要监听用户的交互行为,比如双击行进行进一步的操作。本篇文章将深入讲解如何在ExtJs ...

    ExtJS 2.0实用简明教程

    19)选项面板TabPanel 20)基本表格GridPanel 21)视图区ViewPort 22)可编辑表格EditorGridPanel 23)窗口基本应用 24)窗口分组 25)对话框 26)与服务器交互 27)Record 28)Store 29)TreePanel基本使用 30)使用树控件...

    ext + struts2 例子

    EXT 2.0是EXT的一个早期版本,尽管如此,它已经包含了大量功能强大的组件,如TreePanel(树形面板)、GridPanel(表格面板)和TabPanel(选项卡面板)。这些组件在Web开发中广泛应用,能显著提升用户体验。 1. ...

    Ext3.0的个人笔记及例子

    7. **TreePanel(树形面板)**:TreePanel用于展示层级结构的数据,可以用来创建文件系统浏览、组织结构图等。它支持动态加载、节点拖放、展开/折叠等功能。 8. **GridPanel(表格面板)**:GridPanel是用于展示二...

    EfsFrame Web表现层API文档

    - **简单布局**:Efs框架提供了一种简便的方式来定义页面的基本布局结构。通过使用预定义的布局类型(例如`fit`, `border`等),开发人员可以轻松地组织页面元素,而无需深入了解ExtJS的复杂配置选项。 - **再布局*...

    extjs扩展标记

    1. **EXTJS组件**:EXTJS的核心是它的组件模型,包括GridPanel、TreePanel、PropertyGrid、EditorGridPanel、TabPanel、FormPanel、Panel、Window、ToolTip和FieldSet等。这些组件可以组合起来创建复杂的用户界面,...

    基础到实战ExtJs全程精通培

    此外,还详细讲解了布局方式,如ViewPort和TabPanel,以及FormPanel、TreePanel、GridPanel等关键组件的使用。这些组件是构建复杂Web界面的基础,它们提供了丰富的交互性和数据展示能力。 在数据交互方面,课程涵盖...

    掏钱学extjs完全版

    - 组件详解:逐个解析EXTJS中的重要组件,如GridPanel、TreePanel、TabPanel等。 - 数据绑定和存储:讲解如何使用Store、Model和Proxy实现数据管理。 - 布局和样式:深入学习EXTJS的布局机制和CSS样式应用。 - 实战...

    extjs的快速入门教程

    - **特点**: 提供了一套丰富的UI组件库,如表格、树形菜单、表单等,并支持多种布局管理方式,便于快速构建复杂的前端界面。 #### 二、开始ExtJS 1. **获得ExtJS**: - 通过官方网站或第三方资源下载最新版本的...

    ExtJS基础教程.pdf

    2. **面板类**:如面板(Panel)、标签面板(TabPanel)、提示框(Tip)、窗口(Window)、字段集(FieldSet)、表单面板(FormPanel)、网格面板(GridPanel)和树形面板(TreePanel),构成应用的基本界面结构。 3. **窗口**:...

    RDF 使用帮助

    RDF 封装了 ExtJS 中最常用的布局方式之一——边框布局(Border Layout)。边框布局是一种灵活且高效的布局管理器,适用于创建具有多区域的复杂用户界面。在 RDF 中,可以通过简单的 HTML 属性设置来应用这种布局。 ...

    ext-3.1.1源码

    EXTJS 3.1.1中包含的组件有:GridPanel(表格)、FormPanel(表单)、Window(窗口)、TabPanel(选项卡)、Toolbar(工具栏)等。 2. **布局管理**: EXTJS 3.1.1提供多种布局模式,如Fit布局、Border布局、Form...

    extjs2.2开发实战项目 已经发布运行

    2. **EXTJS控件应用**:项目涵盖了EXTJS2.2几乎所有的控件,如GridPanel用于数据展示,FormPanel用于用户输入,TabPanel实现多页面切换,TreePanel用于层次结构的数据展示,Window和Dialog则提供弹出窗口功能。...

    ExtJs使用过程中积攒的一些东西

    - FormPanel是用于创建表单的组件,可以设置`frame`(是否有边框)、`layout`(布局方式)、`defaults`(组件默认属性)等。例如,`layout:'column'`表示列布局,`labelSeparator`定义标签和字段之间的分隔符。 - ...

    Ext组件说明 Ext组件概述

    TreePanel组件提供了一个层次化的数据展示方式,适用于显示目录结构或具有父子关系的数据集合。 ##### 4. **Viewport(视口)** Viewport组件是Ext应用程序的根容器,用于填充整个浏览器窗口,管理布局和响应窗口...

    Ext经典例子整合 快速上手必看

    EXTJS中的TreePanel是用于展示层次结构数据的组件,常用于文件系统或者组织架构的展示。它支持拖放操作、节点展开/折叠以及节点的动态加载。在树结构中,你可以定义节点文本、图标、叶子节点与父节点等属性,同时...

    老师整理的extjs学习笔记

    每种布局管理器都有其独特的用途和配置选项,开发者可以根据实际需求选择合适的布局管理器。 #### 六、ExtJS 表单 -- Ext.form.FormPanel **6.1 FormPanel 表单** `Ext.form.FormPanel` 是用于创建表单的组件。它...

    Ext.NET.WebForms.Pro.2.5.1.Examples.Explorer

    EXT控件包括但不限于以下几种: 1. GridPanel:数据网格,用于展示大量结构化数据,支持排序、分页、过滤、编辑等功能。 2. FormPanel:表单组件,用于收集和验证用户输入,支持各种表单字段和布局。 3. TreePanel...

Global site tag (gtag.js) - Google Analytics