Запустить событие после локального удаления jqgrid - PullRequest
3 голосов
/ 20 июня 2011

Итак, я пытаюсь запустить событие ПОСЛЕ локального удаления в jqgrid.Причина этого заключается в том, что я имею дело с глобальным сохранением на веб-сайте, поэтому я не публикую напрямую на сервер.Я храню данные в форме JSON в скрытом элементе на странице, поэтому, когда пользователь, наконец, сохраняет элемент, значение захватывается и отправляется на сервер вместе со всеми остальными данными.

Проблема, с которой я сталкиваюсь, заключается в том, что когда я удаляю строку из jqgrid, я не могу обновить скрытый элемент с изменением, поэтому, если пользователь сохраняет после этого, это похоже на то, что удаление никогда не происходило

      $("#translationMappingGrid").jqGrid({
    data: mydata, 
    datatype: "local", 
    mtype: 'GET',
    colNames:['From','To', 'Type'],
    colModel :[ 
        {name:'from',index:'from', width:180, align:"left",sorttype:"float", editable: true, editrules:{custom:true, custom_func:validateIPGridInput}}, 
        {name:'to',index:'to', width:180, align:"left",sorttype:"float", editable: true, editrules:{custom:true, custom_func:validateIPGridInput}}, 
        {name:'type',index:'type', width:200,align:"left",sorttype:"float", editable: true, 
            edittype:"select", formatter:'select', editoptions:{
                value:"0:Never Translate;1:Always Translate;2:Only If Source;3:Only If Destination"}
        }, 
    ],
    pager: '#pager',
    rowNum:10,
    rowList:[10,20,30],
    sortname: 'invid',
    sortorder: 'desc',
    viewrecords: true,
    gridview: true,
    caption: 'Mapping',
    editurl: 'probe.sysinfo.ajax',
    url:'clientArray',
    onSelectRow: function(id){ 
            jQuery('#translationMappingGrid').jqGrid('restoreRow',lastsel2); 
            //below are the parameters for edit row, the function is called after a successful edit has been done
            //jQuery("#grid_id").jqGrid('editRow',rowid, keys, oneditfunc, succesfunc, url, extraparam, aftersavefunc,errorfunc, afterrestorefunc);
            jQuery('#translationMappingGrid').jqGrid('editRow',id,true,"","","","",function () {
                setTranslationMappingJSON(getGridDataJSONString(this));
                window.parent.document.getElementById('notificationDiv').style.display= "";
                }); 

            lastsel2=id; 
    },
    afterInsertRow: function(rowid, rowdata, rowelem ){
        //alert("after insert row");
        setTranslationMappingJSON(getGridDataJSONString(this));
        window.parent.document.getElementById('notificationDiv').style.display= "";
    }


  });

  //adds buttons to jqgrid nav bar
  jQuery("#translationMappingGrid").navGrid('#pager',{
        edit:false,add:true,del:true,search:false,refresh:true
        }, {
            closeAfterAdd:true,
            closeAfterEdit: true
        },
        {
            closeAfterAdd:true,
            closeAfterEdit: true,
            afterSubmit: function(response, postdata) {
                alert("after complete row");
                setTranslationMappingJSON(getGridDataJSONString(this));
                window.parent.document.getElementById('notificationDiv').style.display= "";
                return [true,""];
            }
        });

Как указано в приведенном выше коде, я успешно обновляю скрытый элемент, внося изменения как в добавление, так и в редактирование (inline) с помощью afterrestorefunc, но это не работает для удаления.пытался использовать afterSubmit в коде выше, но это тоже не работает.Я работал над этим уже несколько дней и пришел к выводу, что мне, возможно, придется написать свой собственный код для кнопки удаления полностью, но я надеюсь, что это не так.

1 Ответ

1 голос
/ 07 августа 2015

ОП написал в редакции:

Так что, похоже, я слишком долго смотрел на проблему и упускал очевидное .... повезло мне.Я обнаружил две вещи:

  1. Использовать afterSubmit было неправильно, вместо этого я должен был использовать afterComplete.

  2. Я пытался использоватьafterComplete перед попыткой afterSubmit и причина, по которой он не работал, потому что я помещаю их в параметрах «add», а не в «delete».Еще раз, я чувствую себя довольно удивительно для этого:)

Хорошо, теперь, когда я понял, что вот фрагмент кода, который спас мою жизнь:

    jQuery("#translationMappingGrid").navGrid('#pager',{
    edit:false,add:true,del:true,search:false,refresh:true
    }, {
        closeAfterAdd:true,
        closeAfterEdit: true
    },
    {
        closeAfterAdd:true,
        closeAfterEdit: true
    },{
        afterComplete:
            function () {
                //saves the changed JSON string to the hidden element
                setTranslationMappingJSON(getGridDataJSONString(jQuery('#translationMappingGrid')));
                window.parent.document.getElementById('notificationDiv').style.display= "";
            }                       
    });

Это проверено, и функция вызывается после того, как удаление было выполнено, и сохраняет локальные изменения в моем скрытом элементе.

Для всех, кому интересно, что это за формат:

          /* The following is the setup 
        navGrid(<name>, {<buttons, true/false},
        {
        <edit parameters>
        },
        {
        <add parameters>
        },
        {
        <delete parameters>
        }  
      */

Спасибо всем, кто мог начать работать над этим, и определенно спасибо разработчикам jqgrid.Лучшая сетка JavaScript, с которой я когда-либо работал!

...