jqgrid .trigger ('reloadGrid'); не работает с несколькими сетками

У меня есть jqgrid, предварительно заполненный данными. Щелчок по любой строке отправит 4 запроса ajax для получения сведений (загружаются 4 страницы jsp). На 3 страницах есть новые jqgrids.

У меня есть опция внешнего поиска и очистки в первой сетке (страница jsp). Он отлично работает любое количество раз. Но как только я получаю другие страницы с сетками, поиск и очистка не работают. Конечно, выполняется сценарий, но не триггер.

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

Сетка 1:

<sjg:grid
    autowidth="true"
    id="assetgridtable"
    caption="List of Assets"
    dataType="json"
    href="%{remoteurl}"
    pager="true"
    navigator="false"
    navigatorSearch="false"
    navigatorAdd="false"
    navigatorEdit="false"
    navigatorDelete="false"
    navigatorView="false"
    navigatorExtraButtons="{
    seperator: { 
            title : 'seperator'  
        }
    }"
    gridModel="gridModel"
    rowList="10,15,20,30,50"
    rowNum="15"
    shrinkToFit="true"
    viewrecords="true"
    onSelectRowTopics="rowselect"
    loadonce="false">

Ниже приведен код подписки для rowselect.

$.subscribe('rowselect',
  function(event, data){
    var id = event.originalEvent.id;
    $.ajax(
    {
        type : 'GET',
        url : "displayAsset.action",
        cache : false,
        data :
        {
            "id" : id
        },
        success : function(result)
        {
            $("#dataassetshow").append('<div id="assetshow"></div>');
            $("#assetshow").html(result);
            $("#assetshow").css(
            {
                "text-align" : "center",
            }).show("fast");
        }
    });

Я показываю только один из вызовов ajax, также есть еще 3 вызова, которые выбирают другие сетки.

Теперь поисковый код

 $('#searchAsset').on('submit', function(event)
 {
    $("#assetgridtable").jqGrid('setGridParam',
    {
        type : 'GET',
        url : "listAsset.action",
        page : 1,
        datatype : 'json',
        cache : false,
        gridview : true,
        postData :
        {
            "search" : function()
            {
                return true;
            },
            "searchText" : function()
            {
                return $('#searchText').val();
            },
            "option" : function()
            {
                return $('input[name=option]:checked').val();
            },
            "from" : function()
            {
                return $('#from').val();
            },
            "to" : function()
            {
                return $('#to').val();
            },

        },
    }).trigger('reloadGrid');
    event.preventDefault();
});

Как уже указывалось, приведенный выше код всегда работает нормально, но когда выбираются другие сетки, перезагрузка не запускается !!!


person Krishnakumar Ramachandran    schedule 04.06.2015    source источник


Ответы (1)


Не используйте trigger('reloadGrid') лучше используйте темы перезагрузки.

<sjg:grid 
...
reloadTopics="reloadMyGrid"
...
/>

После этого вы можете запустить перезагрузку в пользовательском коде javascript следующим образом:

$.publish("reloadMyGrid");

или нажав на sj: такую ​​ссылку

<sj:a ... onClickTopics="reloadMyGrid">Link</sj:a>
person Johannes    schedule 04.06.2015
comment
А как вы это попробовали? - person Johannes; 04.06.2015
comment
Я добавил указанный выше атрибут и вместо .trigger ('reloadGrid'); дал .publish ('reloadAssetGrid'); !! - person Krishnakumar Ramachandran; 04.06.2015
comment
.publish ('reloadAssetGrid'); отлично работает с одной сеткой в ​​качестве триггера ('reloadGrid'), проблема начинается только тогда, когда я получаю другие сетки !!!! - person Krishnakumar Ramachandran; 04.06.2015
comment
И у каждой из остальных сеток есть триггерная тема, которая затем публикуется? - person Johannes; 04.06.2015
comment
Извините за поздний ответ, я путешествовал .. Я дал каждой сетке дополнительный атрибут reloadTopics и попробовал. Тем не менее проблема остается. Я использую функцию публикации только для первой сетки, а не для последующих сеток. Он просто получает данные с сервера при загрузке страницы на основе переданного идентификатора выбранной строки из сетки 1. - person Krishnakumar Ramachandran; 06.06.2015
comment
Думаю, у меня та же проблема, что и в этом сообщении stackoverflow.com/questions/2841705/ - person Krishnakumar Ramachandran; 08.06.2015
comment
После долгих усилий я пришел к выводу, что наличие нескольких сеток на одной странице может оказаться вредным. Я заменил другие сетки простыми таблицами с CSS, примененным для похожего вида jqgrid, и теперь все идеально !!! - person Krishnakumar Ramachandran; 08.06.2015