Flex项目渲染器 - 如果为null,不包含元素?

问题描述:

我有项目渲染这样的代码:Flex项目渲染器 - 如果为null,不包含元素?

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

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

说明是可选字段。如果说明字段为空的金额字段向上移动,我想,但就目前来说,只是一个空的空间。有没有办法在mxml中实现这一点?我希望他们在不同的领域,因为我打算使说明可编辑,但金额固定。

我写了一个简单的应用程序来模拟Item渲染器的行为。 诀窍是使用可见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>