comboboxTree的使用:
由于系统中的下拉机构树及专栏模块树的内容太多,下拉框会拉的好长,客户要求可以把它们折叠起来。所以就在网上看到了Ext的comboboxTree下拉树。下面简单介绍一下它的使用。
1、首先在页面引入Ext及ComboBoxTree的定义和CSS样式:
<link rel="stylesheet" type="text/css" href="/commonExt/page/ext-2.2.1/resources/css/ext-all.css" />
<script language="javascript" type="text/javascript" src="/InfoIssue/page/jscripts/ext.js"></script>
<script language="javascript" type="text/javascript" src="/commonExt/page/ext-2.2.1/ext-all.js"></script>
<script language="javascript" type="text/javascript" src="/commonExt/page/ext-2.2.1/ComboBoxTree.js"></script>
2、ComboBoxTree.js内容如下:
/**
* Ext下拉树定义
* 2010-05-13
*/
Ext.ux.ComboBoxTree = function(){
this.treeId = Ext.id()+'-tree';
this.maxHeight = arguments[0].maxHeight || arguments[0].height || this.maxHeight;
this.tpl = new Ext.Template('<tpl for="."><div style="height:'+this.maxHeight+'px"><div id="'+this.treeId+'"></div></div></tpl>');
this.store = new Ext.data.SimpleStore({fields:[],data:[[]]});
this.selectedClass = '';
this.mode = 'local';
this.triggerAction = 'all';
this.onSelect = Ext.emptyFn;
this.editable = false;
this.emptyText = '请选择...',
//all:所有结点都可选中
//exceptRoot:除根结点,其它结点都可选
//folder:只有目录(非叶子和非根结点)可选
//leaf:只有叶子结点可选
this.selectNodeModel = arguments[0].selectNodeModel || 'exceptRoot';
Ext.ux.ComboBoxTree.superclass.constructor.apply(this, arguments);
}
Ext.extend(Ext.ux.ComboBoxTree,Ext.form.ComboBox, {
expand : function(){
Ext.ux.ComboBoxTree.superclass.expand.call(this);
if(!this.tree.rendered){
this.tree.height = this.maxHeight;
this.tree.border=false;
this.tree.autoScroll=true;
if(this.tree.xtype){
this.tree = Ext.ComponentMgr.create(this.tree, this.tree.xtype);
}
this.tree.render(this.treeId);
var combox = this;
this.tree.on('click',function(node){
var isRoot = (node == combox.tree.getRootNode());
var selModel = combox.selectNodeModel;
var isLeaf = node.isLeaf();
if(isRoot && selModel != 'all'){
return;
}else if(selModel=='folder' && isLeaf){
return;
}else if(selModel=='leaf' && !isLeaf){
return;
}
combox.setValue(node);
combox.collapse();
});
var root = this.tree.getRootNode();
if(!root.isLoaded())
root.reload();
}
},
setValue : function(node){
var text = node.text;
this.lastSelectionText = text;
if(this.hiddenField){
this.hiddenField.value = node.id;
}
Ext.form.ComboBox.superclass.setValue.call(this, text);
this.value = node.id;
},
getValue : function(){
return typeof this.value != 'undefined' ? this.value : '';
},
clearValue : function() {
if (this.passField) {
this.passField.value = '';
}
this.setRawValue('');
}
});
Ext.reg('combotree', Ext.ux.ComboBoxTree);
3、在页面加入comboBoxTree的引用:
<%@ page language="java" contentType="text/html; charset=GB2312"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Customizing ComboBoxTree</title>
<link rel="stylesheet" type="text/css" href="/commonExt/page/ext-2.2.1/resources/css/ext-all.css" />
<script language="javascript" type="text/javascript" src="/InfoIssue/page/jscripts/ext.js"></script>
<script language="javascript" type="text/javascript" src="/commonExt/page/ext-2.2.1/ext-all.js"></script>
<script language="javascript" type="text/javascript" src="/commonExt/page/ext-2.2.1/ComboBoxTree.js"></script>
<script type="text/javascript">
var comboBoxTree;
Ext.BLANK_IMAGE_URL = '/commonExt/page/ext-2.2.1/resources/images/default/s.gif';
Ext.onReady(function(){
comboBoxTree = new Ext.ux.ComboBoxTree({
renderTo : 'comboBoxTree',
width : 350,
tree : {
xtype:'treepanel',
loader: new Ext.tree.TreeLoader({dataUrl:'ctbTestFlow.pr.prGetJsonData.do'}),
root : new Ext.tree.AsyncTreeNode({id:'0',text:'根结点'})
},
//all:所有结点都可选中
//exceptRoot:除根结点,其它结点都可选(默认)
//folder:只有目录(非叶子和非根结点)可选
//leaf:只有叶子结点可选
selectNodeModel:'exceptRoot'
});
});
function showValue(){
alert(comboBoxTree.getValue());
}
</script>
</head>
<body>
<table>
<tr>
<td> </td>
<td> <div id="comboBoxTree"></div> </td>
</tr>
</table>
</body>
</html>
4、写一个构件把相应的数据转换成Json对象:
package com.starit.utils;
import org.w3c.dom.*;
import com.primeton.business.bncommon.bizlet.util.BNXmlUtil;
import com.primeton.tp.core.api.BizContext;
/**
* @author zqding
* @version 1.0
* @date 2010-5-12
* @class_displayName ConvertJsonData
*
*/
public class ConvertJsonData {
/**
* 转换的形式为[{......},{......},{......}.....]
* @param doc type: Document, DOM;
* @param param type: BizContext;
* @return: int ,运算逻辑返回值,如果失败返回0,成功返回1
* @throws Exception
* <p>
* ** bizlet 的显示名称 **
* @bizlet_displayName ConvertJson
* @bizlet_param passing="in" type="EOSEntityList" value="list" name="" desc=""
* @bizlet_param passing="in_out" type="field" value="str" name="" desc=""
*/
public static int GetJsonData(Document doc, BizContext param)
throws Exception {
Node node = (Node) param.getParaObjectAt(0);
Node str = (Node) param.getParaObjectAt(1);
StringBuffer strBuffer = new StringBuffer("[");
NodeList entityNodeList = node.getChildNodes();
for(int i=0; i<entityNodeList.getLength();i++) {
Node entityNode = entityNodeList.item(i);
NodeList fieldNodeList = entityNode.getChildNodes();
strBuffer.append("{");
boolean flag_1 = true;
for(int j=0;j<fieldNodeList.getLength();j++) {
Node fieldNode = fieldNodeList.item(j);
if(!flag_1) {
strBuffer.append(", ");
} else {
flag_1 = false;
}
strBuffer.append(fieldNode.getNodeName()+" : \""+fieldNode.getFirstChild()+"\"");
}
strBuffer.append("}");
if(i!=(entityNodeList.getLength()-1))
{
strBuffer.append(", ");
}
}
strBuffer.append("]");
BNXmlUtil.setNodeValue(str, new String(strBuffer));
return 1;
}
}
5、把转换成的Json对象作为comboboxTree的数据out出去:
<%@include file="/internet/common.jsp"%>
<%@ page import="com.primeton.tp.core.prservice.context.RequestContext"%>
<%
try {
RequestContext requestContext = (RequestContext) request.getAttribute(RequestContext.REQUEST_REQUEST_CONTEXT);
String jsonData = requestContext.getProperty("str"); //根据xPath获取相应的节点的值。
StringBuffer jsonDataBuffer = new StringBuffer(jsonData);
out.print(jsonDataBuffer);
System.out.println(jsonDataBuffer);
out.flush();
//out.close();
} catch (Exception e) {
e.printStackTrace();
}
%>
6、最终效果如下所示:
分享到:
相关推荐
7. **API接口**:为了方便使用,ComboBoxTree应提供丰富的API,如设置默认选中项、刷新数据、获取选中项等。 8. **兼容性和扩展性**:好的ComboBoxTree组件应该兼容不同的ExtJS版本,并且易于与其他组件集成,便于...
使用`ComboBoxTree`控件可以简化复杂的用户交互,使得用户在有限的屏幕空间内能方便地浏览和选择层次结构数据。对于熟悉`c#`和`WinForms`的开发者来说,创建这样一个控件既具有挑战性,也能带来成就感,因为它展示了...
《ComboBoxTree.js:JavaScript中的下拉树控件详解》 ComboBoxTree.js,作为一个常见的JavaScript库,主要用于在Web...了解并熟练掌握ComboBoxTree.js的使用,对于提升Web应用的用户体验和开发效率具有重要的意义。
`ComboBoxTree`就是一个很好的例子,它将传统的`ComboBox`与`TreeView`控件的功能结合在一起,为用户提供了一种在下拉列表中以树形结构展示数据的新方式。这个组件是由非官方的开发者设计的,目的是解决在有限的空间...
在ExtJS 4.x框架中,ComboboxTree是一种特殊的组件,它将传统的下拉框与树形结构结合在一起,提供了一种更为灵活的用户输入方式。这种组件在数据选择上非常实用,尤其当数据层级关系复杂时,可以方便地进行多选或...
要实现单选功能,ComboBoxTree可能使用了Ext.selection.Model类,通过配置singleSelect选项来限制用户只能选择一个节点。单击一个节点时,其他已选中的节点将被自动取消选中。这在需要用户做出唯一选择的场景中非常...
在.NET框架中,我们可以使用自定义控件或者第三方库来实现ComboBoxTree的功能。本篇文章将深入探讨ComboBoxTree的源码实现,帮助开发者理解其工作原理和如何在实际项目中应用。 首先,ComboBoxTree的基本概念是将树...
在使用`ComboBoxTree`时,我们需要配置以下主要选项: 1. `store`:定义数据存储对象,可以是Ext.data.TreeStore,用于保存树形结构的数据。 2. `displayField`:指定显示在下拉框中的字段,通常是从树节点数据中...
博客链接提到的是iteye上的一个博客,虽然具体内容无法在当前环境中查看,但可以推测博主可能分享了关于如何使用EXTJS的ComboboxTree组件、它的功能特性、配置选项,或者可能是解决与之相关的问题和技巧。...
本项目“ComboBoxTree.rar”专注于一个特定的UI控件实现,即在传统的下拉组合框(ComboBox)中嵌入树视图(TreeView)的功能。这样的设计可以提供更丰富的交互体验,允许用户在一个紧凑的空间里浏览和选择层次结构的...
TreePanel的加载器 (`TreeLoader`) 使用 `dataUrl` 获取数据,节点参数是 'ID',并且请求方法是 'GET'。这意味着数据将通过HTTP GET请求从服务器获取。 7. **事件监听**: TreePanel 监听 'click' 事件,当用户...
目前公司项目用的 ext 6.5 的 前台框架,在开发过程当中需要使用 到下拉树组件 ext原生并未提供此组件,网上的大部分都不能使用,于是乎自己根据需要手动进行封装,有需要的同学可进行下载.
在本文中,我们将深入探讨如何将Silverlight的树形下拉控件转化为WPF(Windows Presentation Foundation)环境下的使用,并以此创建一个名为“wpf_combobox_tree”的自定义控件。这种控件通常用于增强传统的ComboBox...
`ComboBox` 与 `TreeView` 的结合使用,需要开发者对这两者的API有深入理解。`ComboBox` 需要处理如何动态加载和更新下拉列表的内容,而 `TreeView` 则涉及节点的添加、删除、展开和折叠等操作。这种集成可能通过...
- 动态加载:如果数据量大,可以使用懒加载机制,只在展开节点时请求子节点数据。 在你找到的代码中,可能会包含这些组件的配置和数据结构,以及可能的扩展或插件。分析和理解这些代码,你就能构建出自己的下拉树...