Прочитав ответ Зиге , я подумал о том, что там происходит. Я придумал гораздо более простой способ инициализации значений по умолчанию до того, как первый запрос поступит на сервер.
Вот полный рабочий пример. Идея состоит в том, что существует фильтр столбцов с раскрывающимися списками статусов «Активный» и «Закрытый», где я хочу, чтобы по умолчанию был «Активный». Код имеет комментарии, чтобы объяснить, что происходит:
$('#deals').jqGrid({
colNames: ['...','Status','...'],
colModel: [
{ ... },
// Use the defaultValue attribute to set your defaults in the searchOptions object
{ name: 'Status', stype: 'select', searchoptions: { defaultValue: 'Active', value: {"":"All","Active":"Active","Closed":"Closed",}, sopt: [ 'eq'] }, width: 60 },
{ ... }
],
// Here's where we intercept each server request to cancel it if it's the first one.
// Returning false from this method causes the request to the server to be aborted.
beforeRequest: function () {
// Define a local reference to the grid
var $requestGrid = $(this);
// Check a data value for whether we've completed the setup.
// This should only resolve to true once, on the first run.
if ($requestGrid.data('areFiltersDefaulted') !== true) {
// Flip the status so this part never runs again
$requestGrid.data('areFiltersDefaulted', true);
// After a short timeout (after this function returns false!), now
// you can trigger the search
setTimeout(function () { $requestGrid[0].triggerToolbar(); }, 50);
// Abort the first request
return false;
}
// Subsequent runs are always allowed
return true;
},
url: 'Url/to/your/action',
datatype: 'json',
mtype: 'POST',
pager: '#deals-pager',
rowNum: 15,
sortname: 'Status',
sortorder: 'desc',
viewrecords: true,
height: '100%'
}).jqGrid('filterToolbar', { stringResult: true });
Это также работает с библиотекой Lib.Web.Mvc
(.NET), которая не поддерживает тип данных local
.
Если у вас есть несколько сеток или вы хотите переместить логику beforeRequest в библиотеку для совместного использования, просто определите ее как отдельную функцию и укажите ее по имени в настройке сетки:
function jqGridFilterSetupRequestHandler = function () {
var $requestGrid = $(this);
if ($requestGrid.data('areFiltersDefaulted') !== true) {
$requestGrid.data('areFiltersDefaulted', true);
setTimeout(function () { $requestGrid[0].triggerToolbar(); }, 50);
return false;
}
return true;
}
$('#deals').jqGrid({
colNames: ['...','Status','...'],
colModel: [
{ ... },
// Use the defaultValue attribute to set your defaults in the searchOptions object
{ name: 'Status', stype: 'select', searchoptions: { defaultValue: 'Active', value: {"":"All","Active":"Active","Closed":"Closed",}, sopt: [ 'eq'] }, width: 60 },
{ ... }
],
beforeRequest: jqGridFilterSetupRequestHandler,
url: 'Url/to/your/action',
datatype: 'json',
mtype: 'POST',
pager: '#deals-pager',
rowNum: 15,
sortname: 'Status',
sortorder: 'desc',
viewrecords: true,
height: '100%'
}).jqGrid('filterToolbar', { stringResult: true });