Apache flex 更改列表项Render取决于视图状态

Apache flex 更改列表项Render取决于视图状态,apache-flex,air,flex4,Apache Flex,Air,Flex4,我有一个列表,该项呈现如下所示:。 但是现在我需要启用或禁用按钮delete,这取决于我的列表所在的视图状态 这是我的视图(其中包含列表): 问题是,当屏幕使用状态“main”时,我只想启用itemRender中的delete按钮。我遇到了完全相同的问题 我注入了模型状态(例如modelState),它决定了renderer类中按钮的状态 <s:ItemRenderer> <fx:Script> <![CDATA[

我有一个列表,该项呈现如下所示:。 但是现在我需要启用或禁用按钮delete,这取决于我的列表所在的视图状态

这是我的视图(其中包含列表):



问题是,当屏幕使用状态“main”时,我只想启用itemRender中的delete按钮。我遇到了完全相同的问题

我注入了模型状态(例如modelState),它决定了renderer类中按钮的状态

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


是的,我知道这不是最好的决定

我遇到了完全相同的问题

我注入了模型状态(例如modelState),它决定了renderer类中按钮的状态

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


是的,我知道这不是最好的决定

另一个选项是创建单独的ItemRenders并使用ItemRenderer函数

我从前面提出的类似问题中选取了这个示例,并对其进行了一些修改,以满足您的需要:


编辑: 这是使用的另一种解决方案。通过为每个状态声明不同的属性值,可以指定不同的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">

另一个选项是创建单独的ItemRenders并使用ItemRenderer功能

我从前面提出的类似问题中选取了这个示例,并对其进行了一些修改,以满足您的需要:


编辑: 这是使用的另一种解决方案。通过为每个状态声明不同的属性值,可以指定不同的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">


很好的解决方案,但我决定使用两个diff ItemRenderer。谢谢,这是一个很好的解决方案,但我决定使用两个不同的项目渲染器。谢谢。但实际上,我将我的2渲染器设置为这样:那也可以!使用这样的属性状态可能是一个更干净的解决方案。我会用你的密码更新我的答案。但实际上,我将我的2渲染器设置为这样:那也可以!使用这样的属性状态可能是一个更干净的解决方案。我会用你的密码更新我的答案。