Sto usando funzione di filtro sul lato client di jqGrid:jqGrid del carico completo applicare filtri
var opts = {
...
loadonce: true,
...
}
var grid = jQuery("#Grid");
grid.jqGrid(opts)
grid.jqGrid('navGrid','#mpager',{edit:false,
add:false,
del:false}, {}, {}, {},
{
multipleSearch:true,
multipleGroup:true,
recreateFilter: true,
overlay: 0,
tmplNames: ['Not Empty','All','=10kw','fg'],
tmplFilters: populateStaticFilters(),
});
Sto costruendo il mio filtri personalizzati come questo sulla base di alcune caselle di controllo:
var filter = { "groupOp": "OR",
"rules": []
}
var rules = {
factive : { "field": "Total", "op": "nn", "data": "" },
fempty : { "field": "Total", "op": "nu", "data": "" },
f10 : { "field": "Power", "op": "eq", "data": "10" },
factivetoday : { "field": "LastUpdate", "op": "eq", "data": today },
}
function jqgselectFilter(myfilter){
grid = jQuery("#Grid");
//console.log(myfilter);
grid[0].p.search = myfilter['rules'].length>0;
jQuery.extend(grid[0].p.postData,{filters:JSON.stringify(myfilter)});
grid.trigger("reloadGrid",[{page:1}]);
}
function populateFilter() {
filter['rules']=[]
if (jQuery('input[name=showactive]').attr('checked')) {
filter['rules'].push(rules['factive']);
}
if (jQuery('input[name=showempty]').attr('checked')) {
filter['rules'].push(rules['fempty']);
}
if (jQuery('input[name=showactivetoday]').attr('checked')) {
filter['rules'].push(rules['factivetoday']);
}
//console.log(filter);
jqgselectFilter(filter);
}
mio problema è che Non riesco ad applicare il filtro che corrisponde alla selezione predefinita al momento del caricamento completo o alla griglia completa:
grid.jqGrid('setGridParam', { "loadComplete": populateFilter() });
Se i ritardare l'esecuzione un po 'tutto funziona come previsto:
setTimeout('populateFilter();',500);
come posso raggiungere questo obiettivo senza usare setTimeout?