转自:https://blog.csdn.net/hanchuang213/article/details/62881568

很久没有写代码了,最近在做一个在线帮助网站,于是又捡起了 ExtJS,我用 TreePanel 做为左边栏的导航树,我希望能够根据节点指向的内容来定义节点的图标,如以下的样子:

展开节点以前

展开节点以后

如果节点包含有子节点,则该节点就有 “展开” 和 “关闭” 这两种状态,我希望能过通过设置自己的样式表来控制指定节点的这两种状态下的图标,就如上图那样。

查看了 ExtJS 的帮助文档,文档提到 Ext.Tree.Panel 有一个 iconCls 设置项,但寥寥数语,没有详细的介绍如何使用,更没有提供范例代码:


于是我在节点数据中添加了这个属性(我借用了ExtJS 提供的范例 layout-browser 来测试),并参考了网站上搜索到的许多方法试着去实现这个效果,节点数据如下所示:

但却发现,无论我怎么定义 CSS ,均不能实现我所需要的效果,通过以下样式定义,只能设置节点 “关闭” 状态的图标,一旦展开节点,图标仍是默认的文件夹

样式表如下:


也就是只有 .myicon {...},和 .myicon2 {...}, 这两行定义有效,第二行定义展开节点样式的设置没有起作用,尽管网上提供了许多的范例,逐一试过均无效果(我用的是 ExtJS 4.1.0,不知道是不是版本的问题)。

于是开始分析 ExtJS 的代码了,在  ext-all-dev.js 找到定义节点图标样式的代码(打开文件,用 
“expandedCls” 关键字搜索可以找到相应的代码段 ),分析后我认为,ExtJS 没有很好的处理 iconCls
这个属性,我们需要做一点修改,红色框部分是我添加的代码,添加后问题解决了,而且从原来的代码看,这里应该还定义了叶子节点(leaf 为 true
的节点 )和节点加载数据时的图标状态,这里我仅对节点的 “展开” 和 “关闭” 这两种状态做了测试,其他的大家可以自己尝试一下。


附:

Json代码:

[javascript] view plaincopy
{  
text: '.', 
children: [{ 
    text:'Basic Ext Layouts', 
    iconCls:'myicon', 
    expanded: false, 
    children:[{ 
        text:'Absolute', 
        id:'absolute', 
        iconCls: 'myicon2', 
        leaf:true 
    }] 
},{ 
    text:'Custom Layouts', 
    children:[{ 
        text:'Center', 
        id:'center', 
        leaf:true 
    }] 
},{ 
    text:'Combination Examples', 
    iconCls:'myicon2', 
    children:[{ 
        text:'Absolute Layout Form', 
        id:'abs-form', 
        leaf:true 
    },{ 
        text:'Tabs with Nested Layouts', 
        id:'tabs-nested-layouts', 
        leaf:true 
    }] 
}] 
}

样式表设置代码:
[css] 
.myicon {background-image: url(images/spellcheck.png)} 
.x-grid-tree-node-expanded .myicon 

  /* the icon */ 
  background-image: url(images/printer.png); 

 
.myicon2 {background-image: url(images/page_attach.png)} 
.x-grid-tree-node-expanded .myicon2 

  /* the icon */ 
  background-image: url(images/disk.png); 
}

修改代码段:

[javascript] 
for (; i < len; i++) { 
    row = rows[i]; 
    record = records[i]; 
    if (record.get('qtip')) { 
        row.rowAttr = 'data-qtip="' + record.get('qtip') + '"'; 
        if (record.get('qtitle')) { 
            row.rowAttr += ' ' + 'data-qtitle="' + record.get('qtitle') + '"'; 
        } 
    } 
    if (record.isExpanded()) { 
        row.rowCls = (row.rowCls || '') + ' ' + this.expandedCls; 
    } 
    if (record.isLeaf()) { 
        row.rowCls = (row.rowCls || '') + ' ' + this.leafCls; 
    } 
    if (record.isLoading()) { 
        row.rowCls = (row.rowCls || '') + ' ' + this.loadingCls; 
    } 
    if (record.get('iconCls').length > 0) { 
        row.rowCls = (row.rowCls || '') + ' ' + record.get('iconCls'); 
    } 

作者:sz_gambol

73. 解决ExtJS TreePanel 的 iconCls设置问题的更多相关文章

  1. 【配置】检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为【经典】模式)。

      ×   检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为[经典]模式). 我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 5 ...

  2. 解决extjs grid 不随窗口大小自适应的问题

    解决extjs grid 不随窗口大小自适应的问题 August 30, 2010 zhai Javascript 8,403 viewsGo to comment 最近遇到的问题,在使用grid的时 ...

  3. 完美解决C#Webbrowser控件设置Cookie问题

    完美解决C#Webbrowser控件设置Cookie问题由于个人项目需求,需要把从抓包里面的Cookie数据写入到webbrowser空控件里,经过百度白百般折腾,结果还是失败,搜索到的答案基本上都是 ...

  4. 解决搜狗高速模式及设置页面打不开的问题DisableFeature.reg

    搜狗浏览器安装问题1.安装的时候要选择自定义安装,去掉参加用户体验计划的√,否则可能安装不上.2.搜狗sogou_explorer_7.0_0111.exe,设置页面se://settings/?ca ...

  5. java heap space解决方法和JVM参数设置

    在JVM中如果98%的时间是用于GC(Garbage Collection)且可用的 Heap size 不足2%的时候将抛出异常信息,java.lang.OutOfMemoryError: Java ...

  6. PHPExcel解决内存占用过大问题-设置单元格对象缓存

    PHPExcel解决内存占用过大问题-设置单元格对象缓存 PHPExcel是一个很强大的处理Excel的PHP开源类,但是很大的一个问题就是它占用内存太大,从1.7.3开始,它支持设置cell的缓存方 ...

  7. 【转】检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为【经典】模式)。

    检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为[经典]模式). 我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 500.23 ...

  8. 完美解决了span的宽度设置

    下 面代码的CSS定义完美解决了span的宽度设置问题.由于浏览器通常对不支持的CSS属性采取忽略处理的态度,所以最好将display:inline -block行写在后面,这样在Firefox里面, ...

  9. Android webview 写入cookie的解决方法以及一些属性设置

    原文地址:https://www.2cto.com/kf/201703/616868.html Android webview 写入cookie的解决方法以及一些属性设置,webview怎么设置写入C ...

随机推荐

  1. [Windows Server 2003] 网页Gzip压缩

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:启用网站GZI ...

  2. MyEclipse中VSS的使用详解

    本文系转载,原文地址http://hi.baidu.com/yi88cheng/blog/item/13dd862f765e6b5c4fc226e5.html

  3. Python 之lxml解析库

    一.XPath常用规则 二.解析html文件 from lxml import etree # 读取HTML文件进行解析 def parse_html_file(): html = etree.par ...

  4. mysql 如何用命令清除表数据,让表数据索引是从0开始呢?

    truncate MYTABLE 这样就可以了 其实这个命令就相当于删除表再建 所有的数据都还原 可以使用工具来完成这个操作 右键单击要操作的表,选择Turncale Table 执行查询语句,数据就 ...

  5. CAD在网页绘一个直线,得到直线id,再调该得到直线对象,然写扩展数据

    IMxDrawDatabase::ObjectIdToObject 实体id返回实体对象. 参数 说明 [in] LONGLONG lId 实体id JS代码,中绘一个直线,得到直线id,再调该得到直 ...

  6. typeof和instanceof的区别

    typeof和instanceof的区别: typeof typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型.它返回值是一个字符串,该字符串说明运算数的类型.typeof 一般只能 ...

  7. css3 animation 中的 steps

    steps Specifies a stepping function, described above, taking two parameters. The first parameter spe ...

  8. Django - 内容总结(1)

    内容整理: 1.创建django工程名称 django-admin startproject 工程名 2.创建app cd 工程名 python manage.py startapp cmdb 3.静 ...

  9. 本地文件与服务器文件同步shell脚本

    为何创建此脚本是因为方便项目的布署,不需要手动地去同步不同的项目,而只需要简单的执行shell脚本,输入项目名就能发布到服器上. 1.shell文件代码 #!/bin/sh read -t 30 -p ...

  10. mysql命令整理

    MySQL大小写通用. 一.常见用的mysql指令 1.show databases; #查看当前所有库 2.show tables; #查看所在库中的所有表 3.use 库名; #进入该库 4.sh ...