Изменение ListRender item зависит от состояния просмотра - PullRequest
0 голосов
/ 12 января 2011

У меня есть один список, который элемент отображает так: ссылка . Но теперь мне нужно включить или отключить кнопку удаления в зависимости от состояния просмотра, в котором находится мой Список.

Это мой взгляд (который содержит список):

<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, когда на экране используется состояние "main"

Ответы [ 2 ]

2 голосов
/ 12 января 2011

Другой вариант - создать отдельные itemRenderers и использовать функцию itemRendererFunction.

Я взял этот пример из аналогичного вопроса, который задавался ранее, и немного его изменил в соответствии с вашими потребностями:

flex 4 list ItemRenderer: как я могу иметь разные itemRandrerers для разных строк?

<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: Вот другое решение, которое было использовано.Вы можете назначить разные itemRenderers, объявив разные значения свойств для каждого состояния.

<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">
1 голос
/ 12 января 2011

У меня точно такая же проблема.

Я ввел состояние модели (например, 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>

Да, я знаю, что это не лучшее решение!

...