PDA

Volledige versie bekijken : vbox toevoegen aan tilelist via as3


Princess of Snow
%Europe/Berlin %638 %2008, 15:19
Misschien een dom vraagje, maar ik vind het nergens op het internet en ook niet op LiveDocs.

Is het mogelijk om via actionscripting een VBox, met daarin een image en een label, toe te voegen aan een tilelist? Zelf heb ik het geprobeerd met addChild, maar dan geeft hij niets weer...

Dauntless
%Europe/Berlin %649 %2008, 15:35
Is het niet eenvoudiger om dit gewoon met een item renderer te doen? Waarom moet het absoluut met AS ?

Princess of Snow
%Europe/Berlin %664 %2008, 15:56
Het zit zo:

ik haal uit een xml alle gegevens voor in de tilelist. Dus er staan al vbox'en met daarin images en labels. Dit is de code:


<mx:TileList
height="110"
width="100%"
dataProvider="{pagesData.lastResult.rss.item}"
columnWidth="180"
columnCount="50"
id="playlist">
<mx:itemRenderer>
<mx:Component>
<mx:VBox
height="80"
verticalAlign="middle"
horizontalAlign="center"
verticalScrollPolicy="off"
horizontalScrollPolicy="off">
<mx:Image
id="image"
width="139"
height="75"
source="{data.template}"
scaleContent="true"
autoLoad="true"/>
<mx:Label
text="{data.label}"
styleName="labelEditorStyle"
textAlign="center" />
</mx:VBox>
</mx:Component>
</mx:itemRenderer>
</mx:TileList>


Maar nu wil ik dat men vanuit een datagrid een rij kan slepen naar de tilelist en dat hij dan met de gegevens vanuit de datagrid(de source) een nieuwe image en label maakt en in die tilelist steekt.
Ik zie geen andere manier dan dit te doen met as, of is er toch een andere oplossing?

Nu heb ik het slepen zo gedaan:

In de Datagrid staat dragEnable op true.

in as:

//playlist is de tilelist

private function init():void {
this.playlist.addEventListener(DragEvent.DRAG_ENTE R,DragIn);
this.playlist.addEventListener(DragEvent.DRAG_DROP ,DropIn);
}

public function DragIn(_event:DragEvent):void{
DragManager.acceptDragDrop(this.playlist);
}

public function DropIn(_event:DragEvent):void {
var items:Array = _event.dragSource.dataForFormat("items") as Array;
var nieuwTemplate:Image = new Image;
nieuwTemplate.source = items[0].source;
nieuwTemplate.x = 0;
nieuwTemplate.y = 0;
nieuwTemplate.percentHeight = 100;
nieuwTemplate.percentWidth = 100;
nieuwTemplate.scaleContent="true";
nieuwTemplate.autoLoad="true";

var nieuwLabel:Label = new Label;
nieuwLabel.text = "new page";
nieuwLabel.styleName = "labelEditorStyle";

var nieuwPage:VBox = new VBox;
nieuwPage.addChild(nieuwTemplate);
nieuwPage.addChild(nieuwLabel);

playlist.addChild(nieuwPage);
}


Maar nu voegt die dus die VBox niet toe aan de playlist, of toch niet zichtbaar...

TheDutch
%Europe/Berlin %668 %2008, 16:02
Je moet kunt geen nieuw VBox instantie toevoegen aan de TileList, dat doet de item renderer al automatisch voor je aan de hand van de data provider. Je moet dus de data van het nieuwe item toevoegen aan de data provider van de TileList :).

Princess of Snow
%Europe/Berlin %673 %2008, 16:10
Dat is natuurlijk ook een plan.
Zelf was ik van plan om pas alles naar de databank te sturen wanneer men op een save-knop drukte. Zo kon men rustig nieuwe 'pages' toevoegen, er verwijderen, de volgorde veranderen, labels renamen enzovoort, voordat men alles ging opslagen. Maar is dat dan echt te hoog gegrepen :) ?

TheDutch
%Europe/Berlin %676 %2008, 16:14
Dat kan ook prima hoor. De data provider is een lokaal iets wat niet direct gekoppeld is met je database. Je kunt naar hartelust de data provider veranderen alvorens je de boel verstuurt naar de database voor opslag :).

Princess of Snow
%Europe/Berlin %681 %2008, 16:22
Euhm, hoe dan :# ...

Nu haal ik die gewoon zo af:


<mx:HTTPService
id="pagesData"
url="..."
showBusyCursor="true"
resultFormat="object">
</mx:HTTPService>


en dan zeg ik binnen de tilelist:


dataProvider="{pagesData.lastResult.rss.item}"

TheDutch
%Europe/Berlin %686 %2008, 16:28
Lees je in over E4X, XMLList's, en XMLListCollection's ;).

Princess of Snow
%Europe/Berlin %690 %2008, 16:34
ff opzoeken dan ... :)