Проблема переноса слов в Flex при использовании mx: Text в AdvancedDataGrid itemRenderer, когда имеется длинный текст без пробелов - PullRequest
0 голосов
/ 10 марта 2012

Я использую AdvancedDataGrid во Flex 3. Я устанавливаю переменную RowHeight = "true" для сетки и wordWrap = "true" для столбцов. В столбцах используется itemRenderer, содержащий компонент mx: Text внутри HBox, поэтому я могу использовать текст 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 или метод измерения). Этот вид работает, но прокрутка вверх и вниз в сетке приводит к тому, что он запутывается с неправильной высотой строк. Код ниже:

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

У кого-нибудь есть идеи?

...