#jquery #struts2 #jqgrid #struts2-jquery #struts2-jquery-grid
#jquery #struts2 #jqgrid #struts2-jquery #struts2-jquery-grid
Вопрос:
У меня на моей странице есть следующая jqGrid
<sjg:grid id="reportGrid"
gridModel="gridModel"
autowidth="true"
reloadTopics="refreshGrid" gridview="true"
onGridCompleteTopics="gridLoadComplete"
onSuccessTopics="dataLoadCompleted"
navigator="true"
pager="true"
navigatorSearch="true"
navigatorSearchOptions="{multipleSearch:true}"
scroll="true"
rowNum="10000"
hoverrows="false"
groupColumnShow="false"
groupField="['field1','field2']"
href="webReport"
formIds="myform"
dataType="json"
loadonce="true" >
..........................
..........................
..........................
</sjg:grid>
и кнопка
<sj:a button="true"
buttonIcon="ui-icon-refresh"
buttonText="true"
onclick="reloadGridFunc();">
Submit
</sj:a>
и в JS у меня есть это
function reloadGridFunc()
{
$("#reportGrid").jqGrid('setGridParam',{datatype:'json'});
$.publish("refreshGrid");
// $("#reportGrid")
// .jqGrid('setGridParam',{url:"userReport",datatype:"json"}).
trigger("reloadGrid");
}
$.subscribe('gridLoadComplete', function(event, data) {
// $("#reportGrid").jqGrid('clearGridData');
// $('#reportGrid').setGridParam({ page: 1, datatype: "json"})
// .trigger('reloadGrid');
// $("#reportGrid").trigger('reloadGrid');
});
$.subscribe('dataLoadCompleted', function(event, data) {
// $("#reportGrid").trigger('reloadGrid');
});
но что я вижу, так это то, что сетка заполняется новыми данными, но группировка не очищается; я должен нажать кнопку перезагрузки в нижней части сетки, чтобы обновить сетку, и после этого представление данных выглядит нормально.
У меня есть форма, в которой существуют сетка, привязка и другие HTML-элементы, и в соответствии с ними я выбираю разные критерии и нажимаю кнопку, сетка заполняется, и когда я меняю критерии, сетка заполняется заново, но старая группировка сохраняется. Я должен нажать кнопку перезагрузки в grid, чтобы исправить это.
Комментарии:
1. Почему все ваши тела функций прокомментированы?
2. потому что я пробовал это, но не работал
3. @AndreaLigios есть какие-нибудь идеи, что здесь может быть не так
Ответ №1:
Когда сетка завершена, она проверяет наличие подписчиков onGridCompleteTopics
.
Разделенный запятыми список тем, опубликованных после загрузки всех данных в сетку и завершения всех других процессов.
При успешном завершении сетки проверяется наличие подписчиков onSuccessTopics
.
Разделенный запятыми список тем, которые публикуются при успешном выполнении запроса элемента ajax (переопределяет настройки для целевого контейнера, если они предусмотрены).
Если для события темы не найдено подписчиков, они не будут привязаны к сетке. Итак, убедитесь, что вы подписаны на сетку, прежде чем она проверит наличие подписчиков темы.
Смотрите пример сетки с разделами.
Код для перезагрузки сетки
</sjg:grid>
<script type="text/javascript">
$(document).ready(function(){
$("#reportGrid").trigger("reloadGrid");
});
</script>
Комментарии:
1. Вызывается onGridCompleteTopics, но onSuccessTopics не вызывается, и я отладил его и отметил, что из-за асинхронного вызова $ («#reportGrid»).trigger (‘reloadGrid’) не работал, если я создаю другую кнопку и при этом вызываю триггер reloadgrig, то перезагрузка сетки штрафуется
2. Вы делаете что-то другое, а не
$("#reportGrid").trigger('reloadGrid')
.3. на самом деле после этого $.publish(«refreshGrid»); данные gid перезагружаются, но группы нет, т. е. старый текст группы остается, и когда я нажимаю кнопку перезагрузки, он обновляется, поэтому я вызываю триггер перезагрузки
4. Итак, почему вы не вызываете это в обработчике темы?
5. Вы изменили
href
атрибут тега grid?