ZK показывает огромные данные со списком в Internet Explorer, вызывает ошибку javaScript
Я пытаюсь показать около 300 заголовков и 1000 строк в zk listbox, но в Internet Explorer выдает "Остановить запуск этого скрипта?" ошибка. Если я нажимаю "нет", он продолжает и открывает мой список. В Firefox и Internet Explorer 9 он работает нормально, но я должен использовать проводник 8 . Здесь мое не рабочее решение
<listbox id="listModel" rows="15"
mold="paging" pageSize="15">
<listhead >
<listheader id="${each}"
style="overflow:auto" label="${each}" width=" 250px"
forward="onDoubleClick=onRemoveFromHeader"
forEach="${comboModelColumns}" />
<custom-attributes
headers="${each}" />
</listhead>
<listitem
forEach="${listValues}">
<listcell
forEach="${listValues[forEachStatus.index]}"
label="${each}" />
</listitem>
</listbox>
Вот combomodelColumns
список из 300 строк. а также listValues
это список, который содержит 1000 списков. И каждый список содержит около 300 строк тоже.
2 ответа
Я решил проблему.
это мой зк компонент
<listbox id="listModel" rows="15"
mold="paging" pageSize="15">
<listhead >
<listheader
style="overflow:auto" label="${each}" width=" 250px"
forward="onDoubleClick=onRemoveFromHeader"
forEach="${tmpHeaders}" />
<custom-attributes
headers="${each}" />
</listhead>
<listitem
forEach="${tmpListValue}">
<listcell
forEach="${tmpListValue[forEachStatus.index]}"
label="${each}" />
</listitem>
</listbox>
Я создал только 18 заголовков, но я взял данные о дырах в другом списке. когда я выбираю какой-либо заголовок из своего списка, он добавляется вручную в заголовки списка и данные строки.
Listheader newheader = new Listheader();
newheader.setLabel(listBox_Columns.getSelectedItem().getLabel());
newheader.setWidth("250px");
org.zkoss.zk.ui.sys.ComponentsCtrl.applyForward(newheader, "onRemoveFromHeader");
listModel.getListhead().appendChild(newheader);
for (int i = 0; i < listValues.size(); i++) {
List tmpCurrentRow = (List) listValues.get(i);
List tmpRows = new ArrayList();
Listcell newCell = new Listcell(tmpCurrentRow.get(findIndexHeaderByName(listBox_Columns.getSelectedItem().getLabel(), allHeaders)).toString());
((Listitem) listModel.getItems().get(i)).appendChild(newCell);
}
Вот и все. Кроме того, я добавил функцию удаления заголовка, чтобы удалить добавленные заголовок и ячейки. Это просто устанавливает видимость false.
public void onRemoveFromHeader(ForwardEvent event) {
Listheader listheader = (Listheader) event.getOrigin().getTarget();
listheader.setVisible(false);
listBox_Columns.setSelectedItem(null);
}
К сожалению, Internet Explorer не работает с той же скоростью, что и Firefox и другие браузеры. Если выполнение потока занимает более нескольких секунд, IE предлагает это диалоговое окно пользователю.
Я бы порекомендовал вам разбить список на страницы:
<listbox mold="paging" pageSize="5"/>
Кроме того, ZK позволяет вам использовать события подкачки, позволяя вам решить, когда заполнять больше данных в вашем списке и т. Д.
Взгляни на:
http://books.zkoss.org/wiki/ZK_Component_Reference/Supplementary/Paging