![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jan 2007
Сообщений: 91
|
Добрый день, Есть 2 кастомных компонента, один на основе канвас, другой на основе tilelist с кастомным рендером. Мне необходимо перетаскивать из тайллиста в компонент канвас объекты, но не просто перетаскивать, а перетаскивать данные, допустим, каждый чайл тайллиста имеет 2 параметра, _name и _weight, у меня есть 2 массива, один отвечает за имена, другой за вес. я перетаскиваю чайлд на канвас, отпускаю и тут же мои массивы принимают переданные параметры.
Завис в самом начале, в компонент тайллиста, разрешил драг энд дроп и повесил событием mouseMove с создание датапрокси, но не пойму как передать значение чайлда, который надо формировать из xml <comp:TileListEx x="0" width="223" height="302" backgroundAlpha="0" borderStyle="none" dataProvider="{xmlListColl}" itemRenderer="components.TileListBigItemRenderer" columnWidth="70" rowHeight="70" useRollOver="false" id="pattern" dragEnabled="true" dropEnabled="true" dragMoveEnabled="true" focusAlpha="0" bottom="0" mouseDown="onMouseMove(event)"/> private function onMouseMove(event:MouseEvent):void { var dragInitiator:Image = new Image(); dragInitiator.source = 'assets/ico1.png'; var datasource:DragSource = new DragSource(); // в идеале, тут буду брать данные из xml, опираясь на индекс чайлда datasource.addData("1", "value"); datasource.addData("somename", "name"); var canvasProxy:Canvas = new Canvas(); canvasProxy.height = 25; canvasProxy.width = 25; DragManager.doDrag(dragInitiator, datasource, event, canvasProxy); } мой канвас компонент имееет такой код для обработки событий private var totalValue:Array; private var totalName:Array; private function dragEnterHandler(event:DragEvent):void { trace("dragEnterHandler: "+event.target); if (event.dragSource.hasFormat("value")) { DragManager.acceptDragDrop(Canvas(event.currentTarget)); } } private function dragOverHandler(event:DragEvent):void { trace("dragOverHandler"); var dropTarget:Canvas=event.currentTarget as Canvas; } private function dragDropHandler(event:DragEvent):void { trace("dragDropHandler"); var value:uint = event.dragSource.dataForFormat('value') as uint; var name:String = event.dragSource.dataForFormat('name') as String; totalValue.push(value); totalName.push(name); } если я mouse move уберу, то я могу таскать чайлды, но канвас их не воспринимает, и не дает дропить Последний раз редактировалось MyChemic; 20.02.2010 в 21:25. |
|
|||||
|
Регистрация: Dec 2008
Сообщений: 20
|
В блоках с кодом поменяйте тип на AS3, а то вы подсвечиваете его как php. Код читать невозможно.
|
|
|||||
|
Регистрация: Jan 2007
Сообщений: 91
|
поправил
|
|
|||||
|
Регистрация: Dec 2008
Сообщений: 20
|
Во-первых, заполнение dragSource
private function onMouseMove(event:MouseEvent):void { var dragInitiator:Image = new Image(); dragInitiator.source = 'assets/ico1.png'; var datasource:DragSource = new DragSource(); datasource.addData( tileListChildData, "items"); var canvasProxy:Canvas = new Canvas(); canvasProxy.height = 25; canvasProxy.width = 25; DragManager.doDrag(dragInitiator, datasource, event, canvasProxy); } canvas'у, естественно, dragDrop нативно не прописан. Добавляем хэндлер на дроп private function dragEnterHandler(event:DragEvent):void { trace("dragEnterHandler: "+event.target); if (event.dragSource.hasFormat("items")) { DragManager.acceptDragDrop(Canvas(event.currentTarget)); } private function dragDropHandler(event:DragEvent):void { trace("dragDropHandler"); //получаем массив дропнутых данных var droppedData:Array = event.dragSource.dataForFormat('items') as Array; //обрабатываем данные var item:Object; for each( object in droppedData ) { totalValue.push(object.value); totalName.push(object.name); } } ![]() |
|
|||||
|
Регистрация: Jan 2007
Сообщений: 91
|
спасибо за ответ, но я получил такую ошибку при попытке перетащить объект из листа TypeError: Error #1009: Cannot access a property or method of a null object reference.
очевидно, что она происходит при инициализации драг инициатора, если убрать ивент на маусмув, а оставить только enable drag то на канвас не дропится |
![]() |
![]() |
Часовой пояс GMT +4, время: 11:13. |
|
|
« Предыдущая тема | Следующая тема » |
|
|