Показать сообщение отдельно
Старый 14.01.2012, 12:42
Apikaster вне форума Посмотреть профиль Отправить личное сообщение для Apikaster Найти все сообщения от Apikaster
  № 5  
Ответить с цитированием
Apikaster

Регистрация: Sep 2010
Сообщений: 36
это мной рендерер
Код AS3:
package kz.eitt.ui.renderer 
{	
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	import kz.eitt.dataset.XField;
 
	import mx.collections.ICollectionView;
	import mx.collections.IViewCursor;
	import mx.collections.ListCollectionView;
	import mx.controls.CheckBox;
	import mx.controls.Tree;
	import mx.controls.treeClasses.ITreeDataDescriptor;
	import mx.controls.treeClasses.TreeItemRenderer;
	import mx.controls.treeClasses.TreeListData;
 
	import spark.components.CheckBox;
 
 
	public class XCComboTreeCheckRenderer extends TreeItemRenderer
	{		
		protected var cb:mx.controls.CheckBox;
 
		protected static var STATE_CHECKED:Boolean = true;
		protected static var STATE_UNCHECKED:Boolean = false;
 
		public var isParentSelected:Boolean = false;
		public var isMultiplySelected:Boolean = false;
 
		public var field:XField;
		public var main:Array;
		public var lbfld:String = "name";
		public var key : String = "id";
 
 
		public function XCComboTreeCheckRenderer()
		{
			super();
 
			mouseEnabled = false;
		}
 
		override protected function createChildren():void{
			super.createChildren();
			addCB()
		}
 
		private function addCB():void{
			cb = new mx.controls.CheckBox();
			cb.selected = false;
			//cb.setStyle("verticalAlign", "middle");
			cb.addEventListener(Event.CHANGE, onChange);
			addChild(cb);							
		}
 
		private function onChange(event:Event):void{
			var myListData:TreeListData = TreeListData(this.listData);
			var tree:Tree = Tree(myListData.owner);
 
			if (!isParentSelected){//не отмечать верхний уровень ( родителя )
				if (getParent(data) == data){
					cb.selected = false;
					return;					
				}
			}
 
			if (!isMultiplySelected){
				unSelctAll(tree, getParent(data), false);
			}
 
			data["checked"] = cb.selected;
			ListCollectionView(tree.dataProvider).itemUpdated(data, "checked");
 
			if(cb.selected){
				select(data);
			}else{
				deselect(data);
			}
		}
 
 
		public function select(value:Object):void{			
			main.push(value[key]);
			field.setValue(main.join());
		}
 
		public function deselect(value:Object):void{
			var j:int=main.indexOf(value[key],0);
			if(j!=-1){
				main.splice(j,1);
			}
			field.setValue(main.join());
		}
 
		//Получение родительского объекта
		private function getParent(item:Object):Object{
			var myListData:TreeListData = TreeListData(this.listData);
			var tree:Tree = Tree(myListData.owner);
			var parent:Object = tree.getParentItem(item);
			if (parent != null){
				return getParent(parent);
			}else{
				return item
			}
		}
 
		//Делает все невыделенными
		private function unSelctAll(tree:Tree, item:Object, state:Boolean):void{
			if(item == null){				
			}else{
				//if (item.parent != null){
					if (item["checked"]){
						deselect(item);
					}
					item["checked"] = state;
					var treeData:ITreeDataDescriptor = tree.dataDescriptor;				
					if (treeData.hasChildren(item)){
						var children:ICollectionView = treeData.getChildren(item);
						var cursor:IViewCursor = children.createCursor();
						while(!cursor.afterLast){
							unSelctAll(tree, cursor.current, state);
							cursor.moveNext();
						}
					}	
				//}				
			}
		}
 
 
		override public function set data(value:Object):void{
			if (value != null){				
				super.data = value;
				if (data["checked"] == undefined){
					data["checked"] = false;
				}
				cb.selected = data["checked"];
				//cb.label = value[lbfld];
			}
		}
 
		override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
			super.updateDisplayList(unscaledWidth, unscaledHeight);
 
			cb.x = super.label.x + 5;
			super.label.x = cb.x + 20;
			cb.y = super.label.y +10;			
		} 
	}
}
а это мой комбо бокс с три и чек боксами.
вроде все правильно. и ошибки нету. но не отрабатывает.
Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<mx:PopUpButton xmlns:fx="http://ns.adobe.com/mxml/2009" 
				xmlns:s="library://ns.adobe.com/flex/spark" 
				xmlns:mx="library://ns.adobe.com/flex/mx"				
				implements="kz.eitt.ui.editor.IXCEditor"
				width="100%"
				popUp="{tree}"
				closeOnActivity="false"
				creationComplete="popupbutton1_creationCompleteHandler(event)">
	<fx:Declarations>
		<mx:Tree id="tree"
				 width="100%"
				 rollOverColor="0xFFFFFF"
				 selectionColor="0xFFFFFF"
				 folderClosedIcon="{null}"
				 folderOpenIcon="{null}"
				 defaultLeafIcon="{null}"
				 textAlign="left"
				 creationComplete="tree_creationCompleteHandler(event)"				 
				 >			
		</mx:Tree>
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			import kz.eitt.dataset.DM;
			import kz.eitt.dataset.XDataset;
			import kz.eitt.dataset.XField;
			import kz.eitt.ui.renderer.XCComboTreeCheckRenderer;
 
			import mx.collections.ArrayCollection;
			import mx.events.FlexEvent;
 
 
			private var hr:ClassFactory;
			private var _datset:XDataset;
			public var texts:Array=new Array();
			public var main:Array=new Array();
			public var field:XField;
			public var fieldref:XField;
			public var key : * ;
			public var lblfld : String = "name";
 
			private function init(p:Object):void{
				var pm:Object = {};
				var istree:Boolean;
 
				if (fieldref != null){
					pm = {id:fieldref.getValue()};
				}
 
				if(p != null){
					for (var s:String in p){
						pm[s] = p[s];
					}
				}
 
				istree = false;
				if (field.getEditorConf().istree != undefined){					
					if (field.getEditorConf().istree == "true") {
						istree = true;
					}
				}
 
				var dictds:XDataset=DM.createDS(field.getEditorConf().dataset);
 
				setDataset(dictds);
				if (istree){
					dictds.t("data", true).setAsTree(true);
				}
 
				dictds.exec("default", pm,function(ds:XDataset):void{
					//tree.dataProvider=new ArrayCollection(ds.t("data").getData());					
					tree.dataProvider=ds.t("data").getData();
					tree.labelField = "name";
					key = field.getEditorConf().key;
				});
 
				setDataset(dictds);
			}
 
			public function setField(value:XField):void{
				var refName:String;
				var prop:Object={};
				var b:Boolean;
				field=value;
				refName = field.getEditorConf().fieldref;
				hr = new ClassFactory(XCComboTreeCheckRenderer);
				prop["field"] = field;
				prop["main"] = main;
 
				if (field.getEditorConf().isParentSelected != undefined){
					b = false;
					if (field.getEditorConf().isParentSelected == "true") {
						b = true;
					}
					prop["isParentSelected"] = b;
				}
				if (field.getEditorConf().isMultiplySelected != undefined){
					b = false;
					if (field.getEditorConf().isMultiplySelected == "true") {
						b = true;
					}
					prop["isMultiplySelected"] = b;
				}
				//hr.properties = {field:field, main:main};
				hr.properties = prop;
				tree.itemRenderer = hr;
 
				if (refName != ""){
					fieldref = field.getOwner().findField(refName);
					fieldref.addEventListener(XField.FLD_CHANGE_EVENT, onRefFldChange);
				}
 
				init({});
			}
 
			public function getField():XField{
				return field;
			}
 
			protected function onRefFldChange(event:Event):void{
				var a:Array;
				var pm:Object = {};
				if (fieldref.getEditorConf().parammap != undefined){
					a = fieldref.getEditorConf().parammap.toString().split(",");					
					for (var i:int = 0; i < a.length; i++){
						var xf:XField = fieldref.getEditor().getDataset().findTab("data").findField(a[i]);
						if (xf != null){
							pm[xf.getName()] = xf.getValue();
						}
					}
				}
 
				init(pm);
			}
 
			public function select(value:Object):void{
				texts.push(value.text);
				main.push(value[key]);
				label=texts.join();
			}
 
			public function deselect(value:Object):void{
				var i:int=texts.indexOf(value.text,0);
				var j:int=main.indexOf(value[key],0);
				if(i!=-1&&j!=-1){
					texts.splice(i,1);
					main.splice(j,1);
				}
				label=texts.join();
			}
 
			public function compare(value:Object):Boolean{
				if(getField().getAsString().search(value[key])!=-1==true){
					deselect(value);
					select(value);
				}
				return getField().getAsString().search(value[key])!=-1;
			}
 
			protected function popupbutton1_creationCompleteHandler(event:FlexEvent):void
			{
				label = getField().getAsString();
			}
 
 
			protected function tree_creationCompleteHandler(event:FlexEvent):void
			{
				tree.width = this.width;
			}
 
			public function setDataset(value : XDataset):void{
				_datset = value;
			}
 
			public function getDataset():XDataset{
				return _datset;
			}
		]]>
	</fx:Script>
</mx:PopUpButton>
Добавлено через 2 часа 51 минуту
Можно хоть простенький пример.
Я пойму может в чем проблема.
Заранее спасибо.