要做个下拉框带树结构的控件。
找了几个组件拼凑了个出来了。
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="init()"
width="400" height="300"
showStatusBar="false">
<fx:Script>
<![CDATA[
import flashx.textLayout.operations.CutOperation;
import flashx.textLayout.operations.DeleteTextOperation;
import flashx.textLayout.operations.FlowOperation;
import mx.collections.ArrayCollection;
import mx.collections.ArrayList;
import mx.collections.IList;
import mx.collections.XMLListCollection;
import mx.events.ListEvent;
import mx.utils.StringUtil;
import spark.events.TextOperationEvent;
[Bindable]
private var xm:XML =
<root>
<league label="全公司" data="1234" isdep="true">
<division label="开发" data="2234" isdep="true">
<team label="应用" data="2234" isdep="true"/>
<team label="系统" data="1" isdep="true"/>
<team label="测试" data="234" isdep="true">
<team label="研发吗" data="34" isdep="false"/>
<team label="研发里面" data="56" isdep="false"/>
<team label="研发里" data="153" isdep="false"/>
</team>
<team label="支撑" data="214" isdep="true"/>
</division>
<division label="销售">
<team label="浙江" data="89" isdep="true"/>
<team label="cfdw" data="76" isdep="true"/>
<team label="江苏" data="1255" isdep="true"/>
<team label="上海" data="164" isdep="true">
<team label="上海1" data="34" isdep="false"/>
<team label="上海12" data="56" isdep="false"/>
<team label="上海2" data="153" isdep="false"/>
</team>
<team label="Kansas" data="17834" isdep="false"/>
</division>
<division label="财务" data="1y4" isdep="true">
<team label="tobg" data="1gf4" isdep="false"/>
<team label="tyue" data="5" isdep="false"/>
<team label="Toronto" data="134" isdep="false"/>
<team label="tyar" data="4" isdep="false"/>
<team label="Tampa Bay" data="ui" isdep="false"/>
</division>
<division label="产品" data="734" isdep="true"/>
<division label="cds" data="120" isdep="false"/>
</league>
</root>
;
[Bindable]
public var selectedNode:XML;
[Bindable]
private var a:XMLList = new XMLList();
[Bindable]
private var b:XMLListCollection = new XMLListCollection();
[Bindable]
private var c:ArrayCollection = new ArrayCollection();
[Bindable]
private var bp:ArrayCollection = new ArrayCollection();
private function init():void
{
a = xm.league;
b = new XMLListCollection(a);
c = new ArrayCollection(b.toArray());
this.addEventListener(MouseEvent.MOUSE_DOWN, focusOut);
}
private function focusOut(event:MouseEvent):void
{
if(event.currentTarget.id != 'treelist' && event.currentTarget.id != 'relist')
{
result.displayPopUp = false;
frmPUA.displayPopUp = false;
}
}
protected function openBtn_clickHandler(event:MouseEvent):void
{
// if(result.displayPopUp || frmPUA.displayPopUp)
// {
// result.displayPopUp = false;
// frmPUA.displayPopUp = false;
// }else
// {
frmPUA.displayPopUp = true;
// }
}
protected function textin_changeHandler(event:TextOperationEvent):void
{
var operation:FlowOperation = event.operation;
if (operation is DeleteTextOperation || operation is CutOperation)
{
result.displayPopUp = false;
}
else
{
if (result.displayPopUp = false)
{
result.displayPopUp = true;
return;
}
var keyWord:String = StringUtil.trim(textin.text);
if(keyWord!='')
{
searchKeyWord(keyWord);
}
else
{
result.displayPopUp =false;
}
}
}
private function searchKeyWord(keyWord:String):void
{
bp.removeAll();
bp = filterData(c,keyWord);
// var typedLength:int = textin.text.length;
// var ob:XML = new XML();
if(bp.length > 0)
{
// 搜索时可以让输入框内文字变化,见spark的combobox组件源码
// ob = bp[0] as XML;
// var itemString:String = ob.@label;
// textin.selectAll();
// textin.insertText(itemString);
// textin.selectRange(typedLength, itemString.length);
frmPUA.displayPopUp = false;
result.displayPopUp = true;
textin.addEventListener(KeyboardEvent.KEY_UP, changeFocous);
}
else
{
frmPUA.displayPopUp = false;
result.displayPopUp = false;
if(selectedNode)
{
textin.text = selectedNode.@label;
}
else
{
textin.text = '';
}
}
}
private function changeFocous(event:KeyboardEvent):void
{
if(event.keyCode == 40 || event.keyCode == 13)
{
relist.setFocus();
relist.selectedIndex = 0;
}
}
private function filterData(ac:ArrayCollection, keyword:String):ArrayCollection
{
var xm:XML = ac[0] as XML;
find(xm, keyword);
return bp;
}
// 递归遍历xml
private function find( node:XML, keyword:String ):void
{
for each ( var element:XML in node.elements( ) )
{
var str:String = element.@label;
//区分大小写时 str.indexOf(keyword)
//不区分大小写 str.search(new RegExp(keyword,"gi")
if(str.search(new RegExp(keyword,"gi")) != -1 )
{
// 可以根据在xml标签里定义哪些可以被搜索
// if(element.@isdep == 'false')
// {
var item:Object = element as Object;
if(str == keyword)//出现完全匹配但不在队列前端的将其加到列表最前端
{
bp.addItemAt(item,0);
}else
{
bp.addItem(item);
}
// }
}
find( element,keyword );
}
}
private function listchange(e:ListEvent):void
{
selectedNode = Tree(e.target).selectedItem as XML;
textin.text = selectedNode.@label;
frmPUA.displayPopUp = false;
}
protected function relist_clickHandler(event:MouseEvent):void
{
selectedNode = relist.selectedItem as XML;
textin.text = selectedNode.@label;
result.displayPopUp = false;
}
protected function relist_keyUpHandler(event:KeyboardEvent):void
{
if(event.keyCode == 13)
{
selectedNode = relist.selectedItem as XML;
textin.text = selectedNode.@label;
result.displayPopUp = false;
}
}
]]>
</fx:Script>
<fx:Declarations>
<mx:Tree id="tree1" dataProvider="{c}" width="150" labelField="@label"
selectedIndex="0" />
</fx:Declarations>
<s:Panel x="10" y="10" width="90%" height="90%" title="My ComBoTree Selector Example">
<s:Group id="vg" x="10" y="10">
<s:TextInput x="0" y="0" width="130" height="20" id="textin" change="textin_changeHandler(event)"/>
<s:Button x="130" y="0" id="openBtn" width="20" height="20" label="O"
click="openBtn_clickHandler(event)"/>
<s:PopUpAnchor id="frmPUA" x="0" y="20" popUpWidthMatchesAnchorWidth="true"
popUpPosition="topLeft" width="150" height="200">
<mx:Tree id="treelist" dataProvider="{c}" maxHeight="200" labelField="@label"
selectedIndex="0" change="listchange(event)"/>
</s:PopUpAnchor>
<s:PopUpAnchor id="result" x="0" y="20" popUpWidthMatchesAnchorWidth="true"
popUpPosition="topLeft" width="150" height="200">
<s:List id="relist" dataProvider="{bp}" height="100%" width="100%" maxHeight="200"
labelField="@label" selectedIndex="-1" keyUp="relist_keyUpHandler(event)"
click="relist_clickHandler(event)"/>
</s:PopUpAnchor>
</s:Group>
<!--<mx:PopUpButton width="150" popUp="{tree1}" label="{tree1.selectedItem.@label}"/> -->
</s:Panel>
</s:WindowedApplication>
分享到:
相关推荐
本文将详细讲解如何在Bootstrap环境下实现一个带有搜索功能的下拉树插件,并基于`bootstrap-select`和`bootstrap-treeview`两个库进行介绍。 首先,`bootstrap-select`是Bootstrap官方推荐的一个下拉菜单增强插件,...
3. **实现带搜索功能的下拉树** 在这个插件中,`bootstrap-select`和`bootstrap-treeview`结合在一起,形成了一个具有搜索功能的下拉树。用户可以在下拉菜单中输入搜索词,插件会即时过滤出匹配的树节点。这种组合...
可能包含Bootstrap的HTML模板和jQuery代码,实现搜索功能和树形视图的交互。 8. **表结构及数据**:这部分可能包括数据库的设计和样本数据,例如SQL脚本创建的表格结构以及填充到表中的数据。这些数据被用来初始化...
支持下拉菜单 下拉树 模糊搜索,支持中间字段的匹配
4. **实时更新**:当用户在搜索框中输入时,下拉树会实时更新显示结果,用户可以即时看到搜索结果的变化,而不需要额外的提交操作。 5. **可定制化**:作为一个插件,它应该提供丰富的配置选项,允许开发者根据实际...
在网页开发中,"select下拉带模糊搜索功能"是一个常见的需求,特别是在用户需要从大量选项中快速选择某一特定项时。这个功能提高了用户体验,使查找和选择变得更加便捷。本项目通过HTML、JavaScript(可能包括jQuery...
在EXTJS4中,实现一个下拉树(Combobox Tree)并支持多选和复选功能,主要是通过自定义组件(Ext.define)来完成的。这个组件继承自EXTJS的Picker字段(Ext.form.field.Picker),并添加了树形结构和复选功能。以下...
要实现Flex ComBox的下拉树功能,我们需要以下几个关键步骤: 1. 引入库:首先,确保在你的项目中包含了Flex SDK的相关库,特别是包含Tree组件的库,例如mx.controls.Tree。 2. 创建Tree对象:在代码中创建一个...
在ComboxTree中,我们首先需要创建一个配置对象,定义下拉树的基本属性,如store(数据源)、displayField(用于显示的字段)、valueField(用于存储值的字段)等。同时,为了实现单选,我们需要禁用多选选项,可以...
`layui`和`ztree`这两个工具结合,可以实现一个功能强大的下拉树组件,支持单选和多选,大大提升了用户体验。本文将详细介绍如何利用`layui`和`ztree`来构建这样的组件,并探讨其关键技术和应用场景。 `layui`是一...
- 高级搜索:提供模糊搜索功能,快速定位所需节点。 在实际项目中,ZTree不仅可以应用于下拉菜单,还可以用作文件管理、组织架构展示、权限控制等多种场景。通过深入学习和熟练掌握ZTree的API和配置选项,可以打造...
在“layui树形下拉菜单完整实例”中,我们主要关注的是如何将tree组件与下拉菜单相结合,实现如初始化、动态赋值以及获取选中值等关键功能。 首先,让我们了解layui的tree组件。tree组件是layui提供的一种用于展示...
对于树形ComboBox,我们需要创建一个模板,包含一个TextBox(显示当前选择)和一个Popup(作为下拉树形列表)。这个模板需要使用HierarchicalDataTemplate来展示树形数据。 2. **数据绑定**:WPF提供了强大的数据...
3. **搜索功能**:提供搜索框,让用户能快速定位到目标节点。 4. **样式定制**:为了满足不同的设计需求,下拉树形列表应提供足够的自定义样式选项。 5. **无障碍访问**:确保键盘导航和屏幕阅读器兼容,符合WCAG...
实现懒加载下拉树控件的关键在于以下几个方面: 1. **异步数据加载**:当用户展开树节点时,通过异步请求获取该节点的子节点数据,而不是在初始化时一次性加载所有数据。 2. **缓存管理**:对已加载的节点数据进行...
- **ComboBoxTree.js:** 这是实现下拉树功能的主要JavaScript文件,它定义了自定义的ComboBoxTree组件,包含了构造函数、配置项、方法等,用于创建和操作下拉树。 - **ComboBoxTree-min.js:** 这是压缩后的版本,...
在ExtJS中,下拉树是通过`Ext.form.field.Tree`类实现的,它继承自`Ext.form.field.ComboBox`,增加了树状结构的功能。`ComboTree.js`可能就是实现了这个功能的JavaScript文件,包含了一些定制化的代码或扩展。 ...
【基于ztree开发的下拉...通过这些配置,你可以实现一个符合业务需求的、具有搜索功能的下拉树控件。同时,由于ztree-select是基于ztree的,所以它也继承了ztree的灵活性和可扩展性,能够适应复杂多变的前端应用场景。
9. **交互设计**:优化用户体验是关键,如通过添加搜索功能让用户更容易找到目标节点,或者提供分页以处理大量数据。 10. **响应式设计**:确保下拉多选树在不同屏幕尺寸和设备上都能良好地工作,可能需要应用ExtJS...
本篇文章将深入解析名为"jQuery多功能搜索框插件下拉菜单选择代码"的项目,通过分析压缩包中的文件,揭示其工作原理和实现方式。 首先,项目中包含的主要CSS文件有`bootstrap.min.css`和`jquery.dropdown.css`。`...