• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flex und AIR > Flex allgemein

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 10-03-2010, 04:09   #1 (permalink)
Neuer User
 
Benutzerbild von SynSyn
 
Registriert seit: Mar 2009
Beiträge: 74
addEventlistener zu <mx:image> Tag dynamisch per Funktion!?

Hallo!

Ich komme nicht weiter und verstehe gerade nicht ganz wo ich ansetzen muss!?
Vielleicht hat jemand eine Idee und kann mir helfen?

Vereinfacht gesagt habe ich folgendes <mx:Image> Tag innerhalb eines <mx:Repeater> welcher mit url's aus einer XML Datei gefüttert wird und die dortigen Bilder in einer <mx:HBox> anzeigt.

Code:
    
                    <mx:Image
                    id="myImage"
                    scaleY=".50"
                    scaleX=".50"
                    source="{photos.currentItem.attribute('url')}"
		    horizontalAlign="left" 	
	            creationComplete="ini(event)"
                    completeEffect="{fadeIn}"
                    dragDrop="true"
                    >
Das funktioniert soweit auch wunderbar. Nun möchte ich aber gerne innerhalb dieser HList DragAndDrop ermöglichen und zwar so, dass die Bilder innerhalb dieser einen HList per DragAndDrop in ihrer Reihenfolge verändert werden können (also nicht von hier in irgendeinen anderen Container sondern in dem selben als target)

Deshalb würde ich jetzt auf jedes Bild einen eventListener setzen, der bei creationComplete() eine ini() aufruft, welche die notwendigen eventListener added. Der Aufruf klappt auch, aber wenn ich dann die eventListener zuweisen möchte gibt es zwar keine Fehlermeldung aber anspringen tun sie dann auch nicht. Wenn ich einen eventListener direkt im <mx:image> Tag zuweise - statt der Funktion ini() geht das. Da ich aber für das DragAndDrop mehrere brauche wollte ich das elegant mit der ini() lösen!?

Wenn ich mir in der ini() mit trace(evt.target) ausgebe bekomme ich für jedes Bild die Adresse des Arrays, das der repeater (!?) anlegt - das ist aber ja nicht die Objektreferenz oder!? ist das der Grund weshalb die eventListener nicht reagieren? Und wie kann man das sonst machen damit es funktioniert!?
Das sieht dann z.B. so aus:
Code:
  
...
myApp.categoryStage.main_view.xxx.categoryPhotosStage.VDividedBox68.Panel95.viewstackPhotosTabBar.Canvas102.HPictureGallery.x23.myElement[9].myImage[9]
myApp.categoryStage.main_view.xxx.categoryPhotosStage.VDividedBox68.Panel95.viewstackPhotosTabBar.Canvas102.HPictureGallery.x23.myElement[10].myImage[10]
myApp.categoryStage.main_view.xxx.categoryPhotosStage.VDividedBox68.Panel95.viewstackPhotosTabBar.Canvas102.HPictureGallery.x23.myElement[11].myImage[11]
myApp.categoryStage.main_view.xxx.categoryPhotosStage.VDividedBox68.Panel95.viewstackPhotosTabBar.Canvas102.HPictureGallery.x23.myElement[12].myImage[12]
...
Ach ja: Ich mache das übrigens deshalb nicht mit der HorizontalList, weil meine Bilder zwar alle die selbe Höhe aber sehr unterschiedliche Breiten haben. Und soweit ich das bisher verstanden habe, ist es nicht möglich diese dann bei gleicher Höhe ohne Lücken hübsch nebeneinander in der HorizontalList darzustellen, weil dazu columnWidth variabel an jedes einzelne Bild angepasst werden müsste - was nicht geht!?

Der Vollständigkeit wegen hier noch mal der gesamte Code (es ist eine Komponente, die in meine Applikation eingebunden wird)
Code:
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%">

    <mx:Script>
        <![CDATA[
        	import mx.core.Application;
        	import mx.utils.UIDUtil;
        	import mx.core.DragSource;
        	import mx.core.IUIComponent;
        	import mx.managers.DragManager;
        	import mx.events.DragEvent;
    
               [Bindable]    
               private var _dataFeed:XML;
               private var _categoryIdRef:String;
           
           

            
           public function set dataFeed(value:XML):void
			{
			if (_dataFeed == value)
				return;
			_dataFeed = value;
			}    
			
			
	   public function set categoryIdRef(value:String):void
			{
			if (_categoryIdRef == value)
				return;
			_categoryIdRef = value;
			}  


            private function dataFilter(XMLobj:XML):XMLList
            {
            	var newXMLList:XMLList;
            	
            	for each (var value:XML in XMLobj.contents.content) {
            		if (value.attribute('categoryIdRef')==_categoryIdRef) {
            		trace("***"+value.picture);
            		newXMLList=value.picture;
            		}
            		
            	}
 			return newXMLList;	
            }
            
            
        ]]>
    </mx:Script>

    <mx:Fade id="fadeIn" duration="3000" alphaFrom="0" alphaTo="1"/>
    <mx:Fade id="fadeOut" duration="3000" alphaFrom="1" alphaTo="0"/>
          
                <mx:HBox id="x23" horizontalAlign="center" horizontalGap="2" 
                  backgroundColor="0x333333"
              	  width="100%" height="90%"
              	  paddingTop="2"
              	  paddingBottom="2">

                    <mx:Repeater
                    id="photos" 
                    dataProvider="{dataFilter(_dataFeed)}"
                    recycleChildren="true">         
					
					
			<mx:Box 
			id="myElement" 
			mouseChildren="false"
			backgroundColor="0x333333">
				
					
			<mx:Script> 
			<![CDATA[
			import mx.events.FlexEvent;
					 
			private function ini(evt:Event):void {			
           	        evt.target.addEventListener( MouseEvent.MOUSE_DOWN, beginDrag );
			evt.target.addEventListener( DragEvent.DRAG_ENTER, acceptDrop );
			evt.target.addEventListener( DragEvent.DRAG_DROP, handleDrop );
                        }
           
	                public function beginDrag( mouseEvent:MouseEvent ):void {
			var dragInitiator:IUIComponent = mouseEvent.currentTarget as IUIComponent; 
			var dragSource:DragSource = new DragSource();
			DragManager.doDrag( dragInitiator, dragSource, mouseEvent, null );
         	         }
	         
	                public function acceptDrop( dragEvent:DragEvent ):void {
			var dropTarget:IUIComponent = dragEvent.currentTarget as IUIComponent;
			DragManager.acceptDragDrop( dropTarget );
			}

			public function handleDrop( dragEvent:DragEvent ):void {
			var dragInitiator:IUIComponent = dragEvent.dragInitiator; 
			var dropTarget:IUIComponent = dragEvent.currentTarget as IUIComponent;
			}

			]]>
   			</mx:Script>
		 
                            <mx:Image
                            id="myImage"
                            scaleY=".50"
                            scaleX=".50"
                            source="{photos.currentItem.attribute('url')}"
		            horizontalAlign="left" 	
		            toolTip="ID: {photos.currentItem.attribute('id')}
URL: {photos.currentItem.attribute('url')}"
		            creationComplete="ini(event)"
                            completeEffect="{fadeIn}"
                            dragDrop="true">
                           </mx:Image>
                     
            	           <mx:Text text="ID: {photos.currentItem.attribute('id')}"/>
            	           <mx:TextInput text="{photos.currentItem.attribute('label')}"/>
    			
    			</mx:Box>       
                    </mx:Repeater>
                </mx:HBox>    

</mx:Canvas>

Geändert von SynSyn (10-03-2010 um 08:50 Uhr)
SynSyn ist offline   Mit Zitat antworten
Alt 10-03-2010, 10:09   #2 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.594
Probier's mal mit 'evt.currentTarget'.
__________________
RTFM
Wie man Fragen richtig stellt.

Achim Bindannmalweg

Money makes the world go round, fear makes it turn much faster.
(New Model Army)
sonar ist offline   Mit Zitat antworten
Alt 10-03-2010, 15:49   #3 (permalink)
Neuer User
 
Benutzerbild von SynSyn
 
Registriert seit: Mar 2009
Beiträge: 74
Zitat:
Zitat von sonar Beitrag anzeigen
Probier's mal mit 'evt.currentTarget'.
Das geht jetzt... war ne echte Glanzleistung von mir...
mit dem verirrten mouseChildren="false" in meinem <mx:Box> kann es natürlich auch nicht gehen...
Oh je....

Aber was muss ich denn machen, damit ich auch 'Drop' in die selbe HList machen kann? ich möchte eben einfach per Drag & Drop die reihenfolge der angezeigten Bilder verschieben können? Kann das sein, dass das so gar nicht geht sondern das Target IMMER ein anderes Objekt sein muss???

Geändert von SynSyn (10-03-2010 um 17:12 Uhr)
SynSyn ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Funktion dynamisch erstellen ikkez ActionScript 3 1 20-08-2007 16:03
Eine Funktion dynamisch für mehrere Instanzen erstellen, Variablen dynamisch füllen petershaw Flash 8 0 26-10-2006 16:32
Button-Funktion für Image Arne_Schmidt PHP und MySQL 9 24-09-2005 11:05
Funktion auf dynamisch erzeugte MC´s artbond Flash MX 4 26-11-2003 15:43
Image-load-funktion irauth ActionScript 1 3 16-04-2003 10:04


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele