2011-01-11 54 views
0

我有一個列表,其中的項目呈現像這樣:link。 但現在我需要啓用或禁用按鈕刪除取決於我的列表裏面的視圖狀態。更改列表itemRender取決於視圖狀態

這是我的看法(它包含列表):

<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> 

的事情是,我只是想使itemRender內刪除按鈕時,屏幕使用狀態「主」

回答

2

另一種選擇是創建單獨的itemRenderer並使用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"> 

編輯: 這裏的其他解決方案,這是用過的。您可以通過爲每個狀態聲明不同的屬性值來指定不同的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

沒錯。但實際上設置我2渲染器是這樣的:\t \t 2011-01-12 16:05:06

1

我得到了完全相同的問題。

我注入了模型狀態(例如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

很好的解決方案,但我決定有兩個diff ItemRenderer。謝謝 – 2011-01-12 16:03:45

相關問題