`
atian25
  • 浏览: 467727 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ExtJS 用XTemplate+DataView模拟TabPanel标签页

阅读更多

模拟下tab....

 

为何要这样呢... 需要一个tab样式的标签页,但是点击后不希望切换panel,而是做一些其他的操作.

 

当然,可以通过其他方法操作TabPanel达到效果,但是觉得不好.(代码在后面第2段)

 

 

模拟Tab的代码,两种方式:

一种是XTemplate+Panel,然后自己监控事件

一种是XTemplate+DataView,这种就优雅多了.

 

先上图,免得大漠猪又说我...


 

代码如下:

Ext.onReady(function(){
  Ext.BLANK_IMAGE_URL = '/images/s.gif';
  Ext.QuickTips.init();
  testTab();
});

function testTab(){
//::用xtemplate+panel模拟::
  //firebug偷来的,可以精简
  var tpl = new Ext.XTemplate(
    '<div class="x-tab-panel-header x-unselectable x-tab-panel-header-plain" style="-moz-user-select: none; width:100%;">',
      '<div class="x-tab-strip-wrap">',
        '<ul class="x-tab-strip x-tab-strip-top">',
          '<tpl for=".">',
            '<li class="{[values.isActive?"x-tab-strip-active" : ""]}">',
              '<a onclick="return false;" class="x-tab-strip-close"/>',
              '<a onclick="return false;" href="#" class="x-tab-right">',
                '<em class="x-tab-left">',
                  '<span class="x-tab-strip-inner">',
                    '<span class="x-tab-strip-text ">{values.name}</span>',
                  '</span>',
                '</em>',
              '</a>',
            '</li>',
          '</tpl>',
          '<li class="x-tab-edge"/><div class="x-clear"/>',
        '</ul>',
        '</div><div class="x-tab-strip-spacer"/>',
    '</div>'
  );
  var str = tpl.apply([{name:'成功视图',isActive:true},{name:'失败视图'},{name:'错误视图'},{name:'加拨视图'}])
  
  //顶上的Tab标签
  var p=new Ext.Panel({
    html:str,
    title:'::用xtemplate+panel模拟::',
    height:300,
    width:600,
    renderTo:document.body,
    listeners:{
      'render':function(panel){
        //找到标签页
        var tabs = panel.getEl().select('ul.x-tab-strip li[class!=x-tab-edge]');
        //添加鼠标悬浮样式
        tabs.addClassOnOver("x-tab-strip-over");
        //点击事件
        tabs.on('click',function(e,t,o){
          var target = e.getTarget('li');        
          if (target) {
            var cls = t.className.trim();
            if(cls!="x-tab-strip-active"){
              //切换样式
              tabs.removeClass("x-tab-strip-active");
              Ext.fly(target).addClass("x-tab-strip-active");
              //do sth...
            }
          }
        },this);
      },
      scope:this,
      delay:1000
    }
  });
  
//::用xtemplate+dataview模拟::
  var view = new Ext.DataView({
    autoWidth:true,
    autoHeight:true,
    store:new Ext.data.SimpleStore({
    fields:['id','name',{name:'isActive',type:'boolean'}],
      data:[
        ['tab_suc','成功视图',true],
        ['tab_err','失败视图',false],
        ['tab_fail','错误视图',false],
        ['tab_append','加拨视图',false]
      ]
    }),
    //item选择器
    itemSelector:'li',
    //单选
    singleSelect:true,
    multiSelect:false,
    //选中样式
    selectedClass:'x-tab-strip-active',
    //鼠标悬浮样式
    overClass:'x-tab-strip-over',
    //模板
    tpl:new Ext.XTemplate(
      '<div class="x-tab-panel-header x-unselectable x-tab-panel-header-plain" style="-moz-user-select: none; width:100%;">',
        '<div class="x-tab-strip-wrap">',
          '<ul class="x-tab-strip x-tab-strip-top">',
            '<tpl for=".">',
              '<li class="">',
                '<a onclick="return false;" class="x-tab-strip-close"/>',
                '<a onclick="return false;" href="#" class="x-tab-right">',
                  '<em class="x-tab-left">',
                    '<span class="x-tab-strip-inner">',
                      '<span class="x-tab-strip-text ">{values.name}</span>',
                    '</span>',
                  '</em>',
                '</a>',
              '</li>',
            '</tpl>',
            '<li class="x-tab-edge"/><div class="x-clear"/>',
          '</ul>',
          '</div><div class="x-tab-strip-spacer"/>',
      '</div>'
    ),
    listeners:{
      'afterrender':function(dataview){
        //选中第一行
        dataview.select(0);
        //do sth...
      },
      'click':function(dataview,index,node,e){
        var record = dataview.getStore().getAt(index);
        alert("select:"+record.get('name'));
        //do sth...
      },
      scope:this
    }
  });
  var p = new Ext.Panel({
    title:'::用xtemplate+dataview模拟::',
    height:300,
    width:600,
    renderTo:document.body,
    items:[view]
  });
}

 

 

用TabPanel实现的代码如下:

 

  var tabPanel = new Ext.TabPanel({
    //renderTo: document.body,
    activeTab: 0,
    //width:1000,
    //height:700,
    plain:true,
    defaults:{autoScroll: true},
    items:[
      {
        xtype:'panel',
        layout:'fit',
        title: '成功情况'
      },{
        title: '失败情况',
        layout:'fit'
      },{
        title: '系统错误情况',
        layout:'fit'
      },{
        xtype:'panel',
        title:'加拨视图',
        layout:'fit'
      }
    ],
    listeners:{
      'tabchange':function(tabpanel,newTab,currentTab){
        tabpanel.getActiveTab().add(grid);
        tabpanel.doLayout();
        //if(currentTab==null)return true;
        //Ext.log(newTab.title) 
        //return false;
      }
    }
  });
 

 

  • 大小: 23.5 KB
  • 大小: 43.9 KB
分享到:
评论
3 楼 atian25 2012-12-27  
lightyear416 写道

ExtJs的这个tab标签在美观上有个致命的硬伤,就是标签下的第二根横线,把标签和内容分割成了看似两个部分,你有办法修改样式表,或者采用别的办法让第二根线隐藏掉,或者看起来和内容一色吗?


刚试了下,修改tabpanel下的body, 加一个border-top:0px应该就ok了.
如下图,我这方法比较粗暴。
具体的样式应该如何覆盖,就需要你看下tabpanel的css class层次了。

http://dl.iteye.com/upload/attachment/0078/4706/de86eab6-508e-3ad9-87c7-c8ab09ea539f.png
2 楼 atian25 2012-12-27  
lightyear416 写道
atain25我在官网论坛上看你发帖好几次了,知道你很厉害。
我有一个问题想请教你,看你能不能试着实现一下。
ExtJs的这个tab标签在美观上有个致命的硬伤,就是标签下的第二根横线,把标签和内容分割成了看似两个部分,你有办法修改样式表,或者采用别的办法让第二根线隐藏掉,或者看起来和内容一色吗?


过誉了....抱歉,很久没用extjs了... 我对css也不擅长, 你可以试着用chrome开发者工具,分析下对应的dom, 然后改改吧。
1 楼 lightyear416 2012-12-25  
atain25我在官网论坛上看你发帖好几次了,知道你很厉害。
我有一个问题想请教你,看你能不能试着实现一下。
ExtJs的这个tab标签在美观上有个致命的硬伤,就是标签下的第二根横线,把标签和内容分割成了看似两个部分,你有办法修改样式表,或者采用别的办法让第二根线隐藏掉,或者看起来和内容一色吗?

相关推荐

    extjs动态添加tabpanel标签页支持pannel嵌入

    extjs动态添加tabpanel标签页支持pannel嵌入 逻辑代码在 MyWindow.js里面直接调用 方法 就可以

    Extjs+SpringMVC+MyBaits财务管控系统

    《基于Extjs、SpringMVC和MyBatis的财务管控系统构建详解》 在现代企业信息化建设中,财务管控系统的构建至关重要,它能够帮助企业高效管理财务数据,提高运营效率,确保财务安全。本文将深入探讨如何利用Extjs、...

    最好用的通用后台管理extjs+MySQL+oracle+SQL server数据库源码

    这是本人自己总结最好用的通用后台管extjs+MySQL+oracle+SQL server数据库源码:主要运用了一下的知识: 1、主要运用的后台框架是extjs, 2、jsp+hibernate+Struts2+spring+ajax+jQuery, 3、用到了Java面向对象的...

    ExtJS TabPanel 标签操作

    ExtJS的TabPanel是其组件库中的一个核心组件,用于创建具有多个标签页的应用界面,每个标签页可以承载不同的内容。在本主题中,我们将深入探讨如何操作ExtJS的TabPanel,包括创建、添加、删除和切换标签页,以及...

    基于 Extjs + spring + hibernate 的OA框架

    基于 Extjs + spring + hibernate 的OA框架 基于 Extjs + spring + hibernate 的OA框架 基于 Extjs + spring + hibernate 的OA框架

    Extjs4.2 设置tabpanel当前活动页签的样式

    此外,设置tabpanel当前活动页签的样式还可以使用Extjs的JavaScript API。例如,可以使用 `tabpanel.getActiveTab()` 方法来获取当前活动页签,然后使用 `tab.setStyle()` 方法来设置该页签的样式。这种方法可以提供...

    DWR+extjs+spring+hibernate

    EXTJS则是一个强大的JavaScript UI框架,提供了丰富的组件和美观的用户界面。Spring是一个全面的Java企业级应用开发框架,它提供依赖注入、AOP(面向切面编程)、事务管理等功能。Hibernate是Java领域的一款持久化...

    ExtJs+3.0+最新最全中文API帮助文档

    ExtJs+3.0+最新最全中文API帮助文档+CHM版@156_25590.exe

    extjs4.2.1 tabPanel刷新及关闭标签

    在ExtJS框架中,`TabPanel`组件是一个非常实用且强大的UI控件,它允许用户在一个界面上组织多个相关的视图或面板,并通过标签页的形式进行切换展示。在版本4.2.1中,`TabPanel`提供了丰富的API和方法来控制其行为,...

    Extjs+WEB+应用程序开发指南

    Extjs+WEB+应用程序开发指南 Extjs+WEB+应用程序开发指南 Extjs+WEB+应用程序开发指南

    extjs+asp+access 实例

    extjs+asp+access 实例, 用IIS 即可立即调试 详细请看里面说明 同时,打包文件有个extjs3.0的javascript包,里面有个example文件夹,很多都可以copy过来改成自己的代码

    EXTJS+2.1+酒店管理系统

    EXTJS+2.1+酒店管理系统EXTJS+2.1+酒店管理系统EXTJS+2.1+酒店管理系统EXTJS+2.1+酒店管理系统

    extjs+demo+api

    "extjs+demo+api"这个标题暗示了我们将探讨ExtJS的示例、演示以及其API的使用。 在ExtJS的API中,包含了众多类、方法和配置选项,这些构成了其核心功能。例如,`Ext.Component`是所有UI组件的基础,包括按钮、面板...

    EXTJS+LINQ+MVC

    EXTJS+LINQ+MVC 是一种常见的前端与后端技术结合的方式,用于构建高效、交互性强的Web应用程序。EXTJS是一种基于JavaScript的富客户端框架,提供了丰富的UI组件和数据管理功能;LINQ(Language Integrated Query)是...

    extjs 轻松搞定EXTJS.pdf +很多DEMO 案例

    extjs 轻松搞定EXTJS.pdf +很多DEMO 高清 高质量 案例

    EXTJS + Struct +mysql +json

    EXTJS、Structs和MySQL是三个在Web开发中常见的技术组件,它们共同构成了一个完整的前后端数据交互系统。EXTJS是一种强大的JavaScript库,用于构建富客户端应用;Structs是基于Spring MVC模式的Java Web框架,常用于...

    extjs+spring+struts+hibernate

    **标题:“extjs+spring+struts+hibernate”** **描述:“extjs+spring+struts+hibernate整合实例”** 这个项目是一个综合性的Web应用开发框架整合示例,它结合了ExtJS(一个强大的JavaScript UI库),Spring(一...

    extjs+实例+管理系统+学习extjs的好例子

    extjs+实例+管理系统+学习extjs的好例子

    extjs+servlet+json简单应用

    在这个“extjs+servlet+json简单应用”中,我们将探讨如何将这三个技术结合使用,构建一个简单的Web应用。 首先,我们需要理解ExtJS如何与后端进行通信。ExtJS中的Ajax类提供了与服务器交互的能力,它支持发送GET和...

    ExtJS+3.3+API+中文文档

    ExtJS是一种基于JavaScript的开源富客户端框架,专为构建交互式Web应用程序而设计。这个“ExtJS+3.3+API+中文文档”压缩包包含了关于ExtJS 3.3版本的重要资源,特别是中文版的API文档,这对于理解和开发基于此版本的...

Global site tag (gtag.js) - Google Analytics