2010-12-12 27 views
2

Comment ajouter un élément à un tableau multidimensionnel? Je veux ajouter le prix à item2 mais je reçois « push est pas une fonction »Ajouter un élément à un tableau

<fx:Script> 
    <![CDATA[ 

     [Bindable] 
     public var dp:Array = [ 
      { label: "item1", desc: "this is item 1" }, 
      { label: "item2", desc: "this is item 2" }, 
      { label: "item3", desc: "this is item 3" } 
     ]; 


     private function addItem():void{ 
      var v:String = '$8.99'; 
      dp[1].push(("price:", v)); 
      dp.refresh(); 

     } 
    ]]> 
</fx:Script> 


<mx:VBox> 
    <mx:Repeater id="r" dataProvider="{myAC}"> 
     <mx:RadioButton label="{r.currentItem.label}"/> 
     <mx:Text text="{r.currentItem.desc}"/> 
     <mx:Text text="{r.currentItem.price}"/> 
    </mx:Repeater> 


<s:Button label="push" click="addItem()"/> 


</mx:VBox> 


</mx:Application> 

Répondre

4

Vous avez un tableau d'objets, et non un tableau de tableaux. Essayez ceci:

[Bindable] 
    public var dp:Array = [ 
     { label: "item1", desc: "this is item 1", price : "" }, 
     { label: "item2", desc: "this is item 2", price : "" }, 
     { label: "item3", desc: "this is item 3", price : "" } 
    ]; 

    private function addItem():void{ 
     var v:String = '$8.99'; 
     dp[1]["price"] = v; 
     dp.refresh(); 

    } 
+0

... 'addItem' devrait vraiment être modifié pour refléter l'action ... –

+0

maintenant je reçois une erreur: « refresh() »n'est pas une fonction –

+0

utilisation ArrayCollection au lieu de tableau: publics var dp: ArrayCollection = new ArrayCollection ([ {label: "item1", desc: "ceci est l'article 1", prix: ""}, {label: "item2", desc: "this is item 2", prix : ""}, {label: "item3", desc: "ceci est l'article 3", prix: ""} ]); voir: http://blog.flexdevelopers.com/2009/03/flex-basics-arraycollection.html – wajiw