#html #gwt
#HTML #gwt
Вопрос:
Я следил за крупномасштабным руководством по разработке приложений и MVP — части II, и в последнем выборе (оптимизированные пользовательские представления) говорится, что таблица должна создаваться не по элементу для каждого элемента, а одним потоком, используя HTML-элемент и создавая таблицу с помощью TableElement, TableRowElement и TableCellElement.
Итак, я создал код на основе их примера, но он просто записывает разные HTML-элементы друг под другом. Я думаю, мой код лучше объясняет, что он должен делать.
public void onModuleLoad() {
HTML html = new HTML();
html.setHTML(createTable());
RootPanel.get().add(html);
}
public String createTable() {
//create table
TableElement table = Document.get().createTableElement();
//create tbody
TableSectionElement tbody = Document.get().createTBodyElement();
table.appendChild(tbody);
//Create 10 dummy rows
for (int i = 0; i < 10; i) {
//insert at -1, which is per definition the last posiion
TableRowElement row = tbody.insertRow(-1);
//create 10 dummy columns
for (int j = 0; j < 10; j) {
//insert at -1, which is per definition the last posiion
TableCellElement cell = row.insertCell(-1);
//set a dummy text
String s = (Integer.toString(i) " : "
Integer.toString(j));
cell.setInnerHTML(s);
}
}
return table.getInnerHTML();
}
Есть идеи, почему он не создает таблицу 10×10?
Ответ №1:
Во-первых, я бы посоветовал вам заменить этот код на SafeHtmlBuilder , который должен быть еще быстрее (вообще без манипуляций с DOM).
Далее, к вашей проблеме, вы должны обернуть таблицу в фиктивный контейнер (скажем, DivElement) и использовать getInnerHTML() для этого контейнера.
Ответ №2:
Ну, простая ошибка… Я возвращал table.getInnerHTML();
, которые возвращают часть, начинающуюся <tbody>
и заканчивающуюся </toboy>
. Изменив его на table.toString();
исправлено!
Комментарии:
1. Нет, toString() для элемента не гарантирует возврат «outerHTML» (как это называется в IE); см. Мой ответ.