2015-05-26 3 views
2

Я использую jqGrid с datatype: 'local'. Данные сетки устанавливаются динамически через addRowData. Я не использую асинхронный материал ajax, такой как url + datatype: json, потому что сетка должна отображать только состояние клиента.jqGrid onDelete обработчик события

Теперь я хочу использовать функциональность строки удаления jqGrid (delbutton: true), которая вызывает функцию delGridRow. Это удаляет строку просто отлично, но, конечно, мне нужно удалить базовые данные. Поскольку все это просто клиент, я не могу использовать editurl.

Что я хочу, это onRowDelete или onRowEdited событие. Но jqGrid не поддерживает такую ​​вещь, или, по крайней мере, я не нашел такой вещи. Реализация моей собственной кнопки удаления будет прекрасной, но мне удалось это сделать только с помощью панели инструментов, которая не то, что я хочу.

После много, много возился я придумал следующее решение, чтобы добавить свой собственный обработчик события jqGrid:

var originalDelFunc = $.fn.jqGrid.delGridRow; 
    $.fn.jqGrid.delGridRow = function (rowids, oMuligrid) { 
     var onPreDeleteRowEventHandler = this.getGridParam('onPreDeleteRow'), 
      consumeFlag = false; 
     if (typeof onPreDeleteRowEventHandler === 'function') { 
      consumeFlag = !!onPreDeleteRowEventHandler(rowids, oMuligrid); 
     } 

     if (!consumeFlag) { 
      originalDelFunc.call(this, rowids, oMuligrid); 
     } 
    }; 

использование:

grid.jqGrid(
     'setGridParam', 
     { 
      onPreDeleteRow: function(rowids, oMuligrid) { 
       // remove client data here 
      } 
     }); 

Теперь мой вопрос: почему это так сложно? Я что-то упустил? Является ли это решение жизнеспособным, или оно, вероятно, будет ломаться с будущими версиями?

ответ

1

Вы писали, что используете delbutton: true. Поэтому я полагаю, что вы используете formatter: "actions". formatter: "actions" звонит delGridRow при нажатии кнопки «Удалить». Я предлагаю вам использовать или afterSubmit callbacks, второй параметр содержит информацию об удаленной строке (см. the documentation). Поэтому я предлагаю вам добавить formatoptions: {delOptions: {...}}, где delOptions включает в себя afterComplete или afterSubmit обратные вызовы. Вы должны только не забывать возвращать [true], если вы используете обратный вызов afterSubmit. Такой способ кажется мне более простым, чем подклассы delGridRow, которые вы делаете.

+0

Спасибо, место на. В конце концов, есть обратный вызов :-) –

+0

@OliverSchimmer: Добро пожаловать! – Oleg