Flex не обрабатывает разрывы строк в htmlText - PullRequest
0 голосов
/ 28 июня 2011

Я храню htmlText свойство RichTextEditor в базе данных.

Я получаю его в другом экземпляре и хочу показать пользователю первую строку в виде обычный текст

Так что я позволил Flex обработать преобразование с помощью функции, подобной этой

var editor:TextField = new TextField();
editor.htmlText = htmlTextFromDb;
var converted:String = editor.text;

Однако проблема в том, что это преобразование не обрабатывает строки должным образом. Я получаю все в одной строке!

Допустим, я получаю из базы данных следующее:

<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Arial" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">This is line one</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Arial" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">This is line two</FONT></P></TEXTFORMAT>

Как только я говорю editor.htmlText = htmlTextFromDb, editor.htmlText становится

<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Arial" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">This is line oneThis is line two</FONT></P></TEXTFORMAT>

Действует так, как будто нет новых строк.

Как мне решить эту проблему?

1 Ответ

1 голос
/ 28 июня 2011

Я бы подумал о преобразовании этого HTML-текста на стороне сервера.

Но в AS только вы можете делать это построчно, разбивая на разрыв строки, затем преобразовывая строку в текст и после этого объединяя все.Немного некрасиво, но должно работать.

var editor:TextField = new TextField();
var result:Array = new Array();
var input:Array = htmlTextFromDb.split(/\n/);
for each( var line:String in input) {
    editor.htmlText = line;
    result.push(editor.text);
}
var converted:String = result.join("\n");

edit

Замена тегов регулярным выражением будет другим способомСначала замените закрывающий абзац </P> разрывом строки, а затем удалите все оставшиеся теги.

var lnRegExp:RegExp = new RegExp("</P>", "g");
s = s.replace(lnRegExp, "\n");
var tagRegExp:RegExp = new RegExp("<([^>\\s]+)(\\s[^>]+)*>", "g");
trace(s.replace(tagRegExp, ""));
...