2016-07-18 14 views
0

My Skin:Flex 4: Holen Sie sich das Pressobjekt

<s:DataGroup id="view1" width="100%" height="100%" itemRenderer="views.itemRenderers.BrickItemRenderer" dataProvider="{hostComponent.createArray()}"> 
    <s:layout> 
     <s:TileLayout /> 
    </s:layout> 
    </s:DataGroup> 

Meine Ansicht für für gespeicherte Daten über das Objekt Objekt 'Bausteine'

[Bindable] 
    public function createArray():ArrayCollection 
    { 
     var dataBrick:ArrayCollection = new ArrayCollection(); 
     var data:DataAboutBrick; 
     for (var x:int = 0; x < 5; x++) 
     for (var y:int = 0; y < 7; y++) 
     { 
      data = new DataAboutBrick(); 
      data.x = 0; 
      data.y = 0; 
      data.color = colorBrick; 
      dataBrick.addItem(data); 
     }  
     return dataBrick; 
    } 

Klasse DataAboutBrick erstellen:

public class DataAboutBrick extends Object 
    { 
    public function DataAboutBrick() 
    { 
     super(); 
    } 

    public var x:int; 
    public var y:int; 
    public var color:uint = 0xFF0000; 
    public var id:String; 
    } 
Mediator:

private function btnBricknew_clickHandler(event:BaseBrickEvent):void 
{  
    view.colorBrick = model.currentColor; 
} 

Mediator Farbe ändern alle Objekte beim Klicken auf Objekt. Und muss nur die Farbe des zu drückenden Objekts ändern.

+0

Also, was ist Ihre Frage? Wie bekomme ich den BrickItemRenderer, der innerhalb des Tellelayout geklickt wurde? Ich würde mich von verbindlichen Funktionen fernhalten, die einen Datenprovider zurückgeben, der nach Ärger fragt. Es könnte Fälle geben, in denen Sie plötzlich einen neuen Datenprovider bekommen würden und nicht einmal davon wissen würden. Da Sie über Mediatoren verfügen, erstellen Sie dort den Datenprovider und übergeben Sie ihn ohne Bindung an den View, den MVC-Stil des Klassikers – Philarmon

Antwort

1

Angenommen, Sie haben Brick und BrickSkin definiert, können Sie die Funktionalität definieren können die Farbe in BrickItemRenderer wie folgt zu ändern:

<?xml version="1.0"?> 

<spark:DefaultComplexItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:spark="spark.skins.spark.*"> 
<fx:Script><![CDATA[ 
    [Bindable("dataChanged")] 
    override public function set data(value:Object):void 
    { 
     super.data = value; 
     var brick:Brick = new Brick(); 
     brick.colorBrick = value.color; 
     brick.addEventListener(MouseEvent.CLICK, brickClicked,false,0,true); 
     this.addElement(brick); 
    } 

    private function brickClicked(event:Event) 
    { 
     event.stopImmediatePropagation(); 
     event.preventDefault(); 
     data.color = 0x00FF00;// Please make sure your color variable defined in DataAboutBrick.as is Bindable. 
    } 
    ]]></fx:Script> 
</spark:DefaultComplexItemRenderer>