2015-04-20 3 views
0

Вместо просто «жесткого кодирования» URL-адреса в определении jqGrid, я хочу иметь свою собственную функцию, которая выполняет вызов AJAX.Правильный способ обработки jqGrid ajax call

Я пробовал несколько вариантов, но ни один из них по-настоящему не имитирует сценарий, когда мы напрямую применяем URL.

В принципе, мне нужно сохранить все поведение jqGrid по умолчанию, но быть тем, кто отвечает за выполнение вызова ajax на сервере.

var loadData = function() { 
    var formData = $('#formFilters').serializeArray(); 

    getData(formData) 
     .then(function (data) { 
      $grid 
       .setGridParam({ "datatype": "jsonstring", "datastr": data }) 
       .trigger("reloadGrid"); 

      resizeGrid(); 
    }) 
}; 

И сетка подключен как:

$grid.jqGrid({ 
    datatype: loadData, 
    colModel: [...] 

Основной проблемой здесь является то, что сортировка не будет инициировать вызов Ajax, и я боюсь, что мне нужно, чтобы взломать это немного больше.

Есть ли наилучшая практика в отношении того, как достичь этой развязки между сеткой и функцией передачи данных?

Спасибо, Alex

+0

Не могли бы вы объяснить, что вы подразумеваете под «жестким кодированием» URL-адреса в определении jqGrid и хотите, чтобы вам нужна «ваша собственная функция»? Если вы напишете пример, я покажу, какие параметры jqGrid можно использовать. Вероятно, вам просто нужно использовать опцию 'loadonce: true' в сочетании с' postData'. – Oleg

+0

Привет, Олег, поэтому нормальное использование заключается в использовании свойства url сетки, и вызов ajax будет выполнен внутренне. Дело в том, что в этом proj я не могу напрямую вызвать серверную службу, которая понимает структуру postData jqGrid. Итак, у меня есть моя собственная функция, которая принимает информацию postData и выполняет вызов ajax в том виде, как это понятно серверу. Проблема в том, что, делая это так, как я это делаю, сетка ведет себя как локальные данные. – AlexCode

+0

@ Корре, но вы не указали ни кода, ни точного примера, что вы делаете. jqGrid имеет большую возможность использовать параметры динамического url и делать сериализацию. ** Если вы разместите пример ** того, что вы делаете, я покажу, как преобразовать код в код, который использует 'datatype:« json »и другие параметры, которые полностью настраивают вызов Ajax. – Oleg

ответ

0

Вы можете подключить к этому событию:

jqGridSortCol

документировано здесь: http://www.trirand.com/jqgridwiki/doku.php?id=wiki:events

Вы можете попробовать сначала получить текущие фильтры объекта, как это:

var f = 'gridselector' 
var flts = $('#' + f).jqGrid('getGridParam', 'postData').filters 

вы можете изменить этот объект, а не на крючке события попробовать что-то вроде этого:

$('#' + f).jqGrid('setGridParam', { search: true, postData: flts }); 
$('#' + f).jqGrid().trigger('reloadGrid'); 

пса .. может быть, вы могли бы сделать некоторое jsfiddle из вашей проблемы, поэтому мы можем взглянуть глубже :)

+0

Это именно такой хакерский материал, которого я хотел избежать. В идеале я хочу сохранить все функции по умолчанию сетки, но обрабатывать вызов ajax сам. Причина в основном в том, что я не полностью контролирую сервер, и мне нужно работать с тем, что у меня есть. Другая причина заключается в большей части дизайна, пытаясь отделить конфигурацию пользовательского интерфейса от методов, которые фактически выполняют обратные вызовы. – AlexCode

+0

Я дал вам ссылку на официальную документацию jqgrid и как ее использовать на нужном вам событии, и это сортировка столбцов, как вы сказали .. это не хаки! –

+0

Я закончил этот путь, и он хорошо работает.Когда я сказал, что взлом - это просто потому, что я прыгал, что сетка может автоматически активировать обновление. Благодаря! – AlexCode

Смежные вопросы