`
hello_player
  • 浏览: 153655 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

flex 模拟 ext 的 ItemSelector 双选框控件

    博客分类:
  • Flex
阅读更多

模拟 ext 的 ItemSelector 写了个控件,可以实现拖拽、鼠标双击、按钮操作功能,大概界面如下,原来里面的上下移动的功能感觉没有什么用也就没有实现,有需要的自己加两个方法实现下:

 

 

 

itemSelector.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="{wid}" height="{hei}" creationComplete="init();">
	<mx:Script source="./code/itemSelector.as"/>
	
	<mx:HBox>
		<mx:VBox>
			<mx:Label fontWeight="bold" text="{srclabel}"/>
			<mx:List id="src" width="{listwid}" height="{listhei}" dataProvider="{srclist}"
					 allowMultipleSelection="true" dragEnabled="true" dropEnabled="true"
					 dragMoveEnabled="true" doubleClick="srcDoubleClick(event);" doubleClickEnabled="true"/>
		</mx:VBox>
		<mx:VBox verticalAlign="middle" height="100%">
			<mx:TileList id="imgSelect" maxColumns="1" width="20" height="80" 
						 verticalAlign="middle" borderStyle="none"
						 itemClick="imgSelect_itemClick(event);">
				<mx:dataProvider>
					<mx:Array>
						<mx:Object icon="{insAll}" label=""/>
						<mx:Object icon="{ins}" label=""/>
						<mx:Object icon="{del}" label=""/>
						<mx:Object icon="{delAll}" label=""/>
					</mx:Array>
				</mx:dataProvider>
			</mx:TileList>
		</mx:VBox>
		<mx:VBox>
			<mx:Label fontWeight="bold" text="{destlabel}"/>
			<mx:List id="dest" width="{listwid}" height="{listhei}" dataProvider="{destlist}"
					 allowMultipleSelection="true" dragEnabled="true" dropEnabled="true"
					 dragMoveEnabled="true" doubleClick="destDoubleClick(event);" doubleClickEnabled="true"/>
		</mx:VBox>
	</mx:HBox>
</mx:Canvas>

 

itemSelector.as

// ActionScript file
/**
 * @auth:Jack
 * @date:2009-11-18
 */
import flash.events.MouseEvent;

import mx.collections.ArrayCollection;
import mx.events.ListEvent;
import mx.rpc.events.ResultEvent;

[Bindable]
[Embed(source="flex/assets/images/table_row_delete.png")]
public var ins:Class;

[Bindable]
[Embed(source="flex/assets/images/table_row_insert.png")]
public var del:Class;

[Bindable]
[Embed(source="flex/assets/images/application_side_contract.png")]
public var delAll:Class;

[Bindable]
[Embed(source="flex/assets/images/application_side_expand.png")]
public var insAll:Class;

[Bindable]
public var srclist:ArrayCollection;

[Bindable]
public var destlist:ArrayCollection;

[Bindable]
public var srclabel:String;

[Bindable]
public var destlabel:String;

[Bindable]
public var wid:uint;

[Bindable]
public var hei:uint;

[Bindable]
public var listwid:uint;

[Bindable]
public var listhei:uint;

private function init():void {
	
	if (srclist == null) srclist = new ArrayCollection();
	if (destlist == null) destlist = new ArrayCollection();
	wid = wid < 400 ? 400 : wid;
	hei = hei < 200 ? 200 : hei;
	listwid = wid * 0.45;
	listhei = hei - 30;
}

private function findAuthRangeHandler(event:ResultEvent):void {
	var obj:Object = event.result as Object;
	
	srclist = obj.prodSpecs as ArrayCollection;
}

private function imgSelect_itemClick(event:ListEvent):void {
	var ind:uint = event.rowIndex;
	switch (ind) {
		case 0:
			for each (var obj1:Object in srclist) {
				destlist.addItem(obj1);
			}
			srclist.removeAll();
			break;
			
		case 1:
			for each (var obj2:Object in src.selectedItems) {
				destlist.addItem(obj2);
			}
			for each (var ind2:int in src.selectedIndices) {
				srclist.removeItemAt(ind2);
			}
			break;
			
		case 2:
			for each (var obj3:Object in dest.selectedItems) {
				srclist.addItem(obj3);
			}
			for each (var ind3:int in dest.selectedIndices) {
				destlist.removeItemAt(ind3);
			}
			break;
			
		case 3:
			for each (var obj4:Object in destlist) {
				srclist.addItem(obj4);
			}
			destlist.removeAll();
			break;
			
		default:
	}
}

private function srcDoubleClick(event:MouseEvent):void {
	destlist.addItem(src.selectedItem);
	srclist.removeItemAt(src.selectedIndex);
}

private function destDoubleClick(event:MouseEvent):void {
	srclist.addItem(dest.selectedItem);
	destlist.removeItemAt(dest.selectedIndex);
}

 

 

调用方法:

<isps:itemSelector id="ps" width="600" height="500" 
		 srclist="{prodSpecs}" wid="400" hei="250" destlist="{orderTypes}"
		 srclabel="所有产品规格" destlabel="已选产品规格"/>

 

isps 自定义命名空间,指向你存放 itemSelector.mxml 文件的位置;

srclist 源数据源,数据结构为 [{label:"haha", data:"1"}, {label:"heihei", data:"2"}] 的 ArrayCollection ;

destlist 目标数据源,数据结构和源数据一样,如果初始为空的话可以不传该属性,最后取值也直接使用 ps.destlist 即可,取出来也是上面格式的 ArrayCollection;

wid 为画布宽度,最小限制为400;

hei 为画布高度,最小限制为200;

srclabel 为源数据上面的描述;

destlabel 为目标数据上面的描述。

  • 大小: 16.7 KB
分享到:
评论

相关推荐

    ExtPanel和其他控件

    在本文中,我们将深入探讨Ext.Net框架中的几个关键控件及其属性,包括ExtPanel、Resizable、GridPanel、TreeNode以及Store和ComboBox。这些控件在构建富客户端Web应用程序时扮演着重要角色。 首先,让我们来看看Ext...

    模仿Ext4实现ItemSelector

    模仿Ext4实现ItemSelector,在Rally App开发中虽然是Ext4,但ux包下面的对象被阉割了 所以手动实现了一个,布局和组件化方面还有待改进。

    在网络上找不到项目所用的双选框多种功能,迫不得已在一个开源项目的基础上

    在网络上找不到项目所用的双选框多种功能,迫不得已在一个开源项目的基础上自己重新加了一些功能区实现,代_itemSelector

    extjs4.2的itemselector

    这个组件通常用于实现用户界面中的双列表选择功能,例如在创建一对多或一对一关系时,让用户能从两边的列表中分别选择元素。然而,根据描述,原生的 `itemselector` 在 4.2 版本中可能存在一些问题,特别是它只有 `...

    Extjs treeselector 树结构选择器

    ExtJS TreeSelector是一款基于ExtJS库的组件,它扩展了基础的itemselector功能,提供了一种以树形结构展示数据的选择器。这个组件特别适用于那些需要用户从层次化的数据集中进行选择的应用场景,例如组织架构、目录...

    ExtNet控件使用心得

    ### ExtNet控件使用心得详解 #### Panel控件特性概览 Panel控件在ExtNet框架中扮演着至关重要的角色,其丰富的配置选项使得开发者能够创建出高度定制化的界面组件。以下是一些关键特性的详细解析: - **Closable*...

    ext-----多选下拉框

    `ComboBox`是一个灵活的输入控件,可以用于创建下拉列表,而`multiSelect`则决定了是否允许用户选择多个值。 1. **EXT ComboBox**: `ComboBox`是EXT中的一个核心组件,它结合了文本输入框和下拉列表的功能。你可以...

    Ext.DataView 图片列表显示

    itemSelector: 'li.phone', overClass : 'phone-hover', singleSelect: true, multiSelect : false, autoScroll : true }); new Ext.Panel({ layout: 'fit', items : dataview, height: document.body....

    Ext combobox 下拉多选框带搜索功能

    它提供了一套完整的组件模型,包括各种UI控件,如表格、表单、树形视图等。在Ext JS中,Combobox(下拉框)是常用的一种组件,它允许用户从预定义的选项中选择一个值。在某些场景下,我们可能需要实现更复杂的交互,...

    EXT2.0分页

    EXT2.0分页是网页开发中的一种常见技术,它主要应用于大数据量的展示场景,如搜索结果、用户列表或论坛帖子等。在EXT2.0框架中,分页功能是为了提高网页性能和用户体验而设计的。EXT2.0是一个基于JavaScript的富...

    最近项目需要,写个了itemSelector组件,半成品

    这里提到的`itemSelector`组件显然是一种定制化的选择器,可能用于用户在应用中进行项选择或者过滤操作。从标题“半成品”来看,这个组件可能还在开发阶段,尚未完全成熟,但已经具备一定的功能。 `itemSelector`...

    Extjs4.X下comboboxTree下拉树型菜单,完美支持多选、单选,绝对好用

    itemSelector: 'div.x-combo-list-item' } }); ``` 这个例子创建了一个多选的ComboboxTree,其数据源是一个包含部门信息的TreeStore。 8. **优化与注意事项** - 对于大数据量的树形结构,考虑使用异步加载(`...

    Extjs MultiselectItemSelector

    "Extjs MultiselectItemSelector" 是一个基于ExtJs框架的组件,用于实现多选项选择器功能。在Web应用开发中,这样的组件常用于让用户能够从一组可选项中选取多个项目,例如在用户管理界面中选择多个用户进行操作。...

    Extjs事件和模板

    itemSelector: 'div' }); Ext.getCmp('container').add(list); // 假设有一个id为'container'的容器 } }); }); ``` 综上所述,EXTJS的事件系统和模板机制是其强大功能的重要组成部分。通过理解和熟练运用这两...

    extJS3.1源码及demo

    通过下载并研究"ext-3.1.0"这个压缩包中的源码和示例,开发者不仅可以学习到ExtJS的基本用法,还能深入理解其内部机制,这对于提升JavaScript开发技能和扩展自定义功能非常有帮助。不过需要注意,随着技术的发展,...

    筛选插件Shuffle.js和响应式网格分类、排序

    **标题详解:** "筛选插件Shuffle.js和响应式网格分类、排序" Shuffle.js是一款强大的JavaScript库,专门用于创建动态的、响应式的网格布局系统。它支持对元素进行筛选、排序和分组,使得网页上的内容可以更加灵活...

    coolite ComboBox智能提示

    `DisplayField`和`ValueField`分别指定了显示字段和值字段(都为"Name"),`TypeAhead`设置为"false"表示禁用自动完成,`LoadingText`是加载时的提示文本,`Width`定义了控件宽度,`ItemSelector`设置了选中项的CSS...

    如何实现带有清单的组合框并选择ext js 4.2中的所有选项

    在Ext JS 4.2框架中,创建一个带有清单(多选)功能的组合框(ComboBox)是一项常见的任务,这通常用于提供用户可以选择多个值的交互界面。在本篇文章中,我们将深入探讨如何使用Ext JS 4.2来实现这样一个功能,并...

    用extjs 4.0打造自己的WEB桌面

    itemSelector: a.shortcutItemSelector, store: a.shortcuts, tpl: new Ext.XTemplate(a.shortcutTpl), listeners: { resize: this.initShortcut } } } ``` 测试和优化 为了测试我们的桌面应用程序,我们...

Global site tag (gtag.js) - Google Analytics