2011-01-11 7 views
0

私は1つのリストを持っています。アイテムはこのようにレンダリングされます:link。 しかし、今私はボタンの削除を有効または無効にする必要がありますビューの状態は、私のリストが内部に依存します。リストのアイテムを変更するレンダリングはビューの状態に依存します

これは(リストが含まれています)私の見解である:

<s:states> 
    <s:State name="main" />    <!-- Navigation.CART_MAIN --> 
    <s:State name="cash" />    <!-- Navigation.CART_CASH --> 
    <s:State name="credit" />   <!-- Navigation.CART_CREDIT --> 
</s:states> 
    <s:List id="theList" 
      width="480" height="240" 
      x="69" y="82" 
      dataProvider="{model.products}" 
      useVirtualLayout="false" 
      itemRenderer="com.png.vm.ui.components.ProductCartThumbnail" > 

    </s:List> 

事は、私はちょうど画面が

答えて

2

別のオプションは、itemRenderersを別々に作成し、itemRendererFunctionを使用することです。

私はあなたのニーズに合わせて、以前に頼まれた同様の質問からこの例を取り、それを少し変更した:

flex 4 list ItemRenderer: how can i have different itemrenderers for different rows?

<fx:Script> 
    <![CDATA[ 
     import renderers.*; 

     import mx.core.ClassFactory; 
     import spark.skins.default.DefaultItemRenderer; 

     private function list_itemRendererFunc(item:Object):ClassFactory { 
      var cla:Class = MainItemRenderer; 
      switch (currentState) { 
       case "main": 
        cla = MainItemRenderer; 
        break; 
       default: 
        cla = CashCreditItemRenderer; 
        break; 
      } 
      return new ClassFactory(cla); 
     } 
    ]]> 
</fx:Script> 

<s:List id="theList" 
     x="69" y="82" 
     itemRendererFunction="list_itemRendererFunc" 
     dataProvider="{model.products}" 
     useVirtualLayout="false"> 

EDIT: ここにいた他の解決策です中古。各状態ごとに異なるプロパティ値を宣言することによって、異なるitemRendererを指定できます。

<s:List id="theList" 
     width="393" height="223" 
     x="42" y="69" 
     dataProvider="{model.products}" 
     useVirtualLayout="false" 
     itemRenderer.main="com.png.vm.ui.components.ProductCartThumbnail" 
     itemRenderer="com.png.vm.ui.components.ProductCartThumbnailReadOnly"> 
+0

ありがとうございます。 「=リストID = "theList" \t \t \t \t幅= "393" 高さ= "223" \t \t \t \t X = "42" のY:\t \t

+0

これも機能します!そのようなプロパティの状態を使用すると、おそらくよりクリーンなソリューションになります。あなたのコードで私の答えを更新します。 –

1
「メイン」状態を使用しているときitemRender内部の削除ボタンを有効にしたいということです

私はまったく同じ問題を抱えています。

レンダラークラスのボタンの状態を決定するモデル状態(たとえばmodelState)を注入しました。

<s:ItemRenderer> 
    <fx:Script> 
     <![CDATA[ 
       import spark.components.List; 

       [Bindable] 
       public var modelState:String; 

       public function deleteItem():void { 
        var parentList:List = owner as List; 
        // remove the item 
        parentList.dataProvider.removeItemAt(parentList.dataProvider.getItemIndex(data)) 
       } 
      ]]> 
     </fx:Script> 
     <s:HGroup> 
      <s:Label text="{data}" /> 
      <s:Button id="remove" label="X" click="deleteItem()" 
         enable="{modelState=='main'}"/> 
     </s:HGroup> 
</s:ItemRenderer> 

はい、これは最善の決定ではありません。

+0

私は2つのdiff ItemRendererを持つことにしました。ありがとう –

関連する問題