Текст, введенный в <plaintext>, не клонируется
От: Hawk Россия  
Дата: 07.11.10 16:45
Оценка:
Есть HTML-таблица и в ней такая строка:
<tr>
    <td #category>
        <plaintext>Test 1</plaintext>
    </td>
    <td #expression>
        <plaintext>Test 2</plaintext>
    </td>
</tr>

Проблема в следующем. Если я наберу какой-нибудь текст в элементе <plaintext> в окне HTMLayout, он мистическим образом останется вне DOM. "Мистическим" потому, что введенные значения все-таки можно извлечь через dom::element::get_value(). Однако, через dom::element::get_html() эти значения не увидеть. Кроме того, их нельзя клонировать.

Т.е., если я попытаюсь сделать такое:
dom::element plaintext = m_row.find_first( "#category plaintext" );
CString sValue = plaintext.get_value().to_string();

TRACE( "value: %s\r\n", sValue ); // 1
TRACE( "%s\r\n", m_row.get_html().c_str() ); // 2

То, набрав в первой ячейке "Test A", в первом TRACE я получу "value: Test A", а во втором код:
<tr>
<td id="category" >
    <plaintext value="Test 1" ></plaintext>
</td>
<td id="expression" >
    <plaintext value="Test 2"></plaintext>
</td></tr>

Т.е., получается как с тем сусликом. Ты его не видишь, а он есть!

Как следствие, если я попытаюсь клонировать строку:
dom::element newRow = m_row.clone();
table.insert( newRow, m_row.index() + 1 );

...в результате получу строку со старым текстом, изначально прописанном в разметке, а не с тем что набрал пользователь.

Пытался вызвать dom::element::update() и для строки, и для plaintext — бесполезно. Единственный вариант — вручную явно перенести все value's из строки-оригинала в строку-клон. Тогда все работает как надо.

Но возникает вопрос — почему так? Почему вводимые пользователем значения не попадают напрямую в DOM, а лежат где-то "вовне"? Как минимум, это выглядит очень странно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.