我在Flex 3中使用AdvancedDataGrid。我在网格上设置variableRowHeight =“true”,在列上设置wordWrap =“true”。列使用包含HBox中的mx:Text组件的itemRenderer,以便我可以使用HTML文本。
一切都很棒,我的文字正在包装,除非我有一个没有空格的长字符串。在这种情况下,根本不包装。相反,会出现一个完全遮盖文本的滚动条,因为它不会扩展单元格的高度以为其提供空间。有没有办法强迫Flex打破像这样的长字符串,或者某种方式我可以做一个解决方法来获得类似的行为?我知道mx:TextArea即使没有空格也可以破坏HTML文本,所以我不确定为什么它也不能在这里完成。
以下是我的代码:
<mx:AdvancedDataGrid width="100%" variableRowHeight="true">
<mx:columns>
<mx:AdvancedDataGridColumn headerText="A" wordWrap="true">
<mx:itemRenderer>
<mx:Component>
<mx:HBox width="100%">
<mx:Text htmlText="{data.a}"/>
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:AdvancedDataGridColumn>
<mx:AdvancedDataGridColumn headerText="B" wordWrap="true">
<mx:itemRenderer>
<mx:Component>
<mx:HBox width="100%">
<mx:Text htmlText="{data.b}"/>
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:AdvancedDataGridColumn>
</mx:columns>
</mx:AdvancedDataGrid>
我尝试添加一个不可见的mx:TextArea组件,除了当mx:Text宽度大于mx:HBox宽度时,在这种情况下我让它可见并隐藏mx:Text(在重写的mx中: HBox updateDisplayList或measure方法)。这种工作,但在网格中上下滚动会导致它混乱,行高不正确。代码如下:
<mx:AdvancedDataGrid width="100%" variableRowHeight="true">
<mx:columns>
<mx:AdvancedDataGridColumn headerText="A" wordWrap="true">
<mx:itemRenderer>
<mx:Component>
<mx:HBox width="100%">
<mx:Script>
<![CDATA[
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
super.updateDisplayList(unscaledWidth, unscaledHeight);
if (this.width > 0 && text.width > this.width) {
text.visible = false;
text.includeInLayout = false;
textArea.visible = true;
textArea.includeInLayout = true;
} else {
text.visible = true;
text.includeInLayout = true;
textArea.visible = false;
textArea.includeInLayout = false;
}
}
]]>
</mx:Script>
<mx:Text id="text" htmlText="{data.a}"/>
<mx:TextArea
id="textArea"
htmlText="{data.a}"
visible="false"
includeInLayout="false"
width="100%"
editable="false"
paddingLeft="0"
borderStyle="none"/>
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:AdvancedDataGridColumn>
</mx:columns>
</mx:AdvancedDataGrid>
有人有什么想法吗?