我想要实现的是只有搜索选项连接到执行远程搜索,其中服务器将返回结果集,并且每个其他jqgrid选项(如列排序,分页等)将在客户端执行.
我知道这可以通过设置loadonce:true并根据.click()事件在’local’和’json’之间切换’datatype’参数来完成,具体取决于我是单击sort还是next-page,search等.
还有另一种方法吗?如果没有,你们可以建议一个干净的方式来做上述黑客行为.
谢谢!
解决方法
首先,我使用JSON作为结果,因此使用jsonReader.
接下来,以下是特定于实现{{search:remote},{sorting:local},{pagination:local}}行为的设置.
>设置loadonce:false或者点击“搜索”按钮不会命中服务器,而是始终执行本地搜索.
>我想实现jqGrid的多重搜索功能,因此可以在寻呼机栏中显示微小的“放大镜”.
jQuery("#list2").jqGrid('navGrid','#pager2',{ del:false,add:false,edit:false},{},{multipleSearch:true});
>现在我如何实现远程搜索功能是通过在onSearch和onClose事件上将数据类型从local切换到json.即在触发搜索查询(即单击“查找”按钮)时,我将loadonce设置为false,将数据类型设置为json.这确保了远程搜索.
现在,我们的网格填充了远程搜索的数据,我们要切换回数据类型:本地,但是明确地设置它的OnClose不工作,所以不是我设置loadonce:真的,后来设置的数据类型:本地本身更高版本.
另请注意,我有closeAfterSearch:true,cloSEOnEscape:true,因此我确保在触发搜索查询后始终关闭onClose事件.
jQuery("#list2").jqGrid('searchGrid',{multipleSearch: true,closeAfterSearch: true,cloSEOnEscape: true,onSearch: function(){$("#list2").setGridParam({loadonce: false,datatype: 'json'}); $("#list2").trigger("reloadGrid"); },onClose: function(){$("#list2").trigger("reloadGrid"); $("#list2").setGridParam({loadonce: true}); $(".ui-icon-refresh").trigger('click'); } });
$(“.ui-icon-refresh”).触发器(‘click’);加载结果后强制刷新.在某些情况下这是必要的(不知道为什么).我自己偶然发现了这个问题,我不知道为什么会这样.如果你有一个想法,我很想知道背后的原因.
>最后,每次加载网格时,默认情况下都会弹出搜索框.所以我只需点击模式框的’x’按钮就强行关闭它. Hacky但是有效! :P
$(".ui-icon-closethick").trigger('click');
<<<整个jqGrid代码>>>
请原谅我代码中的’xyz’.我在那里有一些Django代码,所以我只是用xyz替换它以避免任何混淆.
jQuery(document).ready(function(){ $("#list2").jqGrid({ url:'xyz',datatype: 'json',loadonce: false,mtype: 'GET',colNames:xyz colModel :xyz,jsonReader : { repeatitems: false,root: "rows",page: "page",total: "total",records: "records" },height: '100%',width: '100%',pager: '#pager2',rowNum:15,rowList:[10,15,30],viewrecords: true,caption: ' ',autowidth: false,shrinkToFit: true,ignoreCase:true,gridview: true }); jQuery("#list2").jqGrid('navGrid',{multipleSearch:true}); jQuery("#list2").jqGrid('navButtonAdd',{ caption: "",buttonicon: "ui-icon-calculator",title: "choose columns",onClickButton: function() { jQuery("#list2").jqGrid('columnChooser'); } }); jQuery("#list2").jqGrid('searchGrid',datatype: 'json'}); $("#list2").trigger("reloadGrid"); },onClose: function(){$("#list2").trigger("reloadGrid"); $("#list2").setGridParam({loadonce: true}); $(".ui-icon-refresh").trigger('click'); } }); $(window).bind('resize',function () { clearTimeout(resizeTimer); resizeTimer = setTimeout(resizeGrids,60); divwidth = $(".content-Box-header").width() - 40; //alert(divwidth); $("#list2").setGridWidth(divwidth,true); }); $(window).resize(); $(".ui-icon-closethick").trigger('click'); });