2011-01-11 55 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

相关问题