Flex рендеринг элементов - не включать элемент, если ноль? - PullRequest
1 голос
/ 07 апреля 2011

У меня есть код средства визуализации элементов, подобный этому:

<s:HGroup>
    <s:Label text="{data.DateTime}"/>

    <s:VGroup>
        <s:Label text="{data.Description}"/>
        <s:Label text="{data.Amount}"/>
    </s:VGroup>
</s:HGroup>

Описание является необязательным полем. Я хотел бы, чтобы поле Описание было нулевым для поля Сумма, чтобы двигаться вверх, но сейчас есть толькопустое пространство.Есть ли способ добиться этого в mxml?Я хочу, чтобы они были в отдельных полях, потому что я планирую сделать Описание редактируемым, но Сумма фиксированной.

1 Ответ

3 голосов
/ 07 апреля 2011

Я написал простое приложение, которое имитирует поведение средства визуализации элементов.Хитрость в том, чтобы использовать visible и includeInLayout свойства:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
               creationComplete="application1_creationCompleteHandler(event)"
               >

    <fx:Script>
        <![CDATA[
            import mx.charts.DateTimeAxis;
            import mx.events.FlexEvent;

            [Bindable]
            private var data:Object;

            protected function application1_creationCompleteHandler(event:FlexEvent):void
            {
                var newData:Object = new Object();
                newData.DateTime = new Date();
                newData.Description = "Description";
                newData.Amount = 12345;
                data = newData;
            }           


            protected function setNull_clickHandler(event:MouseEvent):void
            {
                var newData:Object = new Object();
                newData.DateTime = new Date();
                newData.Description = null;
                newData.Amount = 12345;
                data = newData;

            }


            protected function setValue_clickHandler(event:MouseEvent):void
            {
                var newData:Object = new Object();
                newData.DateTime = new Date();
                newData.Description = "Description";
                newData.Amount = 12345;
                data = newData;
            }

        ]]>
    </fx:Script>


    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>


    <s:VGroup>
        <s:HGroup>
            <s:Button id="setNull" label="Set Null" click="setNull_clickHandler(event)"/>
            <s:Button id="setValue" label="Set Description" click="setValue_clickHandler(event)"/>
        </s:HGroup>
        <s:Label text="Renderer"/>      
        <s:HGroup>
            <s:Label text="{data.DateTime}"/>
            <s:VGroup>
                <s:Label text="{data.Description}"
                         visible="{data.Description != null}"
                         includeInLayout="{data.Description != null}"
                         />
                <s:Label text="{data.Amount}" />
            </s:VGroup>
        </s:HGroup> 
    </s:VGroup> 
</s:Application>
...