2010-06-27 4 views
0

Je suis en train de mettre en œuvre un glisser-déposer à partir d'un DataGrid sur une liste dans une application Flex 3 AIR. Je voudrais que l'image glisser soit une photo (jpg) référencée par un champ String dans l'élément de la grille de données, nommé 'imagePath'. J'ai du mal à faire apparaître l'image pendant le glissement. J'ai vérifié trois fois que ce n'est pas à cause d'un chemin invalide à l'image. J'ai essayé les méthodes source() et load() d'Image de toutes les façons que je peux penser. J'appelle cette méthode 'dragCurrentToList (event)' sur un événement mouseDown.Comment charger dynamiquement l'image pour glisser-déposer?

private function dragCurrentToList(event:MouseEvent):void 
{     
    var current:Object = event.currentTarget.selectedItem; 

    var dragImg:Image = new Image(); 
    dragImg.load(current.imagePath); 
    dragImg.width = 100; 
    dragImg.width = 100; 

    var dsource:DragSource = new DragSource(); 
    dsource.addData(current, 'record'); 

    DragManager.doDrag(event.currentTarget as DataGrid, dsource, event, dragImg); 
} 

Cela fonctionne parfaitement si je définis la source de l'image sur la variable de liaison suivante, mais je ne veux pas coder en dur le nom de l'image.

[Bindable] 
[Embed(source='assets/icons/default.jpg')] 
public var dragIcon:Class; 

... 
dragImg.source = dragIcon 
... 

Répondre

0

Dans la méthode dragCurrentToList, pourquoi vous chargez l'image au lieu de simplement spécifier l'attribut source que l'URL de l'image?

http://livedocs.adobe.com/flex/3/langref/mx/controls/SWFLoader.html#source

private function dragCurrentToList(event:MouseEvent):void 
{     
    var current:Object = event.currentTarget.selectedItem; 

    var dragImg:Image = new Image(); 
    dragImg.source = current.imagePath; 
    dragImg.width = 100; 
    dragImg.width = 100; 

    var dsource:DragSource = new DragSource(); 
    dsource.addData(current, 'record'); 

    DragManager.doDrag(event.currentTarget as DataGrid, dsource, event, dragImg); 
} 

Assurez-vous également que vous répondez à l'événement dragStart. (http://livedocs.adobe.com/flex/3/langref/mx/core/UIComponent.html#event:dragStart). Et je crois au lieu d'accéder à la classe DragManager; vous devez simplement modifier la propriété dragSource de l'événement dragStart.

+0

Merci, mais j'ai essayé. Peut-être que c'est parce que imagePath n'est pas une classe? J'ai essayé: dragImg.source = contact.imagePath; et dragImg.source = "assets/icons/default.jpg"; et dragImg.source = "@Embed (source = 'assets/icons/default.jpg')" Ils ont tous le même comportement. Rien n'apparaît lorsque vous faites glisser et rien dans la console. Oui, je suis passé à répondre à dragStart. Logique. – cafe101

+0

Je reprends la partie sur l'utilisation de dragStart par http://livedocs.adobe.com/flex/3/html/help.html?content=dragdrop_5.html – cafe101

+0

D'accord, j'ai retiré le code de la Flextras DataSorter, où j'ai utilisé un approche similaire [nous générons des données bitmap à la volée; cependant, ne référençant pas les données d'image de l'objet, cependant]. Les données dragImage sont définies dans dragStartHandler à l'aide de la fonction DragManager.doDrag. Mais, dragImage est un getter. Est-il possible que vous pouvez remplacer le getter dragImage w/o mucking w/dragStartEvent. BUt, si vous décidez d'utiliser le dragEvent, assurez-vous de remplacer le dragStartHandler existant de sorte que vous n'ayez pas deux sections de code en concurrence qui essaient de définir le dragImage. – JeffryHouser

Questions connexes