Есть 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, а лежат где-то "вовне"? Как минимум, это выглядит очень странно.