首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jqGrid getGridParam('colModel')缺失信息

jqGrid getGridParam('colModel')缺失信息
EN

Stack Overflow用户
提问于 2015-05-15 18:25:03
回答 1查看 839关注 0票数 0

当页面卸载并存储在会话中时,我希望捕获jqGrid的jqGrid,以便下次用户访问该页面时,它可以自动加载。但是,('#contract_grid').getGridParam('colModel')返回的信息缺少网格列搜索选项中的部分或全部信息。

知道为什么会这样,或者如何捕获完整的colModel吗?网格在初始加载时运行良好,但是没有其他搜索选项参数,当我从存储在会话中的colModel刷新页面时,筛选条特性/菜单就无法工作。

为网格创建默认的colModel

代码语言:javascript
运行
复制
var defaultColModel = 
[

    {name:'REQUESTID'
        ,index:'requestID'
        ,label:'Request ID'
        ,search:true
        ,stype:'text'
        ,width:75
        ,key:true
        ,hidden:false
    },  
    {name:'REQUESTEDDATE'
        ,index:'requestedDate'
        ,label:'Request Date'
        ,sorttype:"date"
        ,search:true
        ,width:50
        ,searchoptions:{
            dataInit:function(el){jQuery(el).daterangepicker(
                            {
                            arrows:false
                            , dateFormat:'yy-mm-dd'
                            , onClose: function(dateText, inst){ jQuery("#contract_grid")[0].triggerToolbar();}
                            , onOpen: function() {
                                jQuery('div.ui-daterangepickercontain').css({"top": jQuery('#mouseY').val() + 'px', "left": jQuery('#mouseX').val() + 'px' });
                            }

                        });
                }
            }
        ,hidden:false
    },

    {name:'BUSINESSOWNERPERSONID'
        ,index:'businessOwnerPersonID'
        ,label:'Business Owner'
        ,search:true
        ,stype:'select'
        ,width:100
        ,hidden:false
        ,searchoptions: {
             dataUrl: 'cfc/com_common.cfc?method=getAjxPeople&role=businessOwnerPersonID',
             buildSelect: function(resp) {
                 var sel= '<select><option value=""></option><option value="7583,1636">My Reports</option>';
                 var obj = $.parseJSON(resp);
                 $.each(obj, function() {
                     sel += '<option value="'+this['lk_value']+ '">'+this['lk_option'] + "</option>"; // label and value are returned from Java layer
                 });
                 sel += '</select>';
                 return sel;
             },          
             dataEvents: [{  
                 type: 'change',
                 fn: function(e) {
                     alert(this.value)
                 }
             }]
         }
    }
];

当用户导航离开页面时,将网格保存到会话,以便当它们返回时加载网格。

代码语言:javascript
运行
复制
$(window).on('beforeunload', function(){
     takeSnapshot();     
});
function takeSnapshot(){
var gridInfo = new Object();
    gridInfo.colModel = jQuery('#contract_grid').getGridParam('colModel');
    gridInfo.postData = jQuery('#contract_grid').jqGrid('getGridParam', 'postData');
    var snapshotData = JSON.stringify(gridInfo);

 $.ajax({
    url:  "actions/act_filter.cfc?method=takeSnapshot",
    type: "POST",
    async: false,
    data: {gridName:'contract_grid'
            ,gridParamName:'contractGridParams'
            ,filterData:snapshotData

    }
}); 

}

创建网格变量

代码语言:javascript
运行
复制
var myGrid = jQuery("#contract_grid").jqGrid({
    url:            'cfc/com_ajxRequestNew.cfc?method=getReqJSON&returnformat=json',
    datatype:       'json',
    postData:       {filters: myFilters},
    mtype:          'POST',
    search:         true,
    colModel:       defaultColModel,
    altRows:        true,
    emptyrecords:   'NO CONTRACTS FOUND',
    height:         400,
    width:          1200,
    sortname:       lastSortName,
    sortorder:      lastSortOrder,
    page:           lastPage,
    pager:          jQuery('#report_pager'),
    rowNum:         lastRowNum,
    rowList:        [10,20,50,100],
    viewrecords:    true,
    clearSearch:    false,
    caption:        "Contracts Dashboard",
    sortable:       true,
    shrinkToFit:    false,
    ajaxSelectOptions: {type: "GET"},
    gridComplete: function() {
        //set the selected toolbar filter values
        var myFields = JSON.parse(myFilters);
        //set fields in form at top. filter contains index value so get corresponding name value because its used in the column label #gs
        if ( myFields['rules'].length > 0 ) {
            for (var i=0; i < myFields['rules'].length; i++ ) {
                $.each(defaultColModel, function(j) {
                    if(this.index == myFields['rules'][i]['field'] ) {
                        thisFieldName = this.name;
                        jQuery('#gs_' + thisFieldName).val( myFields['rules'][i]['data'] ); 
                    }
                })
            }
        }
    }
});
jQuery("#contract_grid").navGrid('#report_pager',{
    edit:false,
    add:false,
    del:false,
    search:false,
    refresh:false
}).navButtonAdd("#report_pager",{ caption:"Clear",title:"Clear Filters", buttonicon :'ui-icon-trash',
    onClickButton: function() {
        jQuery.ajax({
          url: "/assets/js/ajx_clearFilter.cfm?showHeader=0",
          async: false,
          type: "POST",
          data: ({variableName:'session.contractGridParams'})
        });
        myGrid[0].clearToolbar();
    }
}).navButtonAdd("#report_pager",{ caption:"Restore",title:"Restore Default Grid Columns and Filters", buttonicon :'ui-icon-refresh',
    onClickButton: function() {
        window.location = '?page=dsp_requestListingNew&clearSession=1';
    }
}).navButtonAdd("#report_pager",{
        caption:    "Export",
        title:      "Export to Excel",
        buttonicon :'ui-icon-document',
        onClickButton: function(e){
            jQuery("#contract_grid").jqGrid('excelExport',{url:'includes/act_requestListingExport.cfm'});
        }
}).navButtonAdd("#report_pager",{
    caption: "Columns",
    buttonicon: "ui-icon-calculator",
    title: "Select and Reorder Columns",
    jqModal: true,
    onClickButton: function(e){

        $('#contract_grid').jqGrid('columnChooser', {
            dialog_opts: {
                modal: true,
                minWidth: 470,
                show: 'blind',
                hide: 'explode'
            }
        }); 
    }

}).navButtonAdd("#report_pager",{
    caption:    "Save",
    title:      "Save Snapshot",
    buttonicon :'ui-icon-disk',
    onClickButton: function(e){
        takeSnapshot(0);
        $('#fltrFrmLink').click();
    }
});
jQuery("#contract_grid").jqGrid('filterToolbar', {
    stringResult : true
    , searchOnEnter : true
    , autoSearch : true
    , beforeClear : function() {
        //set sortnames
        var sn = jQuery("#contract_grid").jqGrid('getGridParam','sortname');
        //set sort orders
        var so = jQuery("#contract_grid").jqGrid('getGridParam','sortorder');
        so = "desc";
        //set grid params
        jQuery("#contract_grid").jqGrid('setGridParam',{ sortorder:so, sortname:sn });

    }
});

colModel由('#contract_grid').getGridParam('colModel')在卸载时返回。搜索选项缺少REQUESTEDDATE的所有内容。BUSINESSOWNERPERSONID缺少部分dataEvents和所有buildSelect。

代码语言:javascript
运行
复制
[{"name":"REQUESTID",
"index":"requestID",
"label":"Request ID",
"search":true,
"stype":"text",
"width":75,
"key":true,
"hidden":false,
"title":true,"lso":"",
"widthOrg":75,"resizable":true,"sortable":true},
{"name":"REQUESTEDDATE",
"index":"requestedDate",
"label":"Request Date",
"sorttype":"date",
"search":true,
"width":50,
"searchoptions:{},
"hidden":false,
"title":true,
"lso":"",
"widthOrg":50,
"resizable":true,
"sortable":true,"stype":"text"},
{"name":"BUSINESSOWNERPERSONID",
"index":"businessOwnerPersonID",
"label":"Business Owner",
"search":true,
"stype":"select",
"width":100,"hidden":false,
"searchoptions":{"dataUrl":"cfc/com_common.cfc?method=getAjxPeople&role=businessOwnerPersonID",
    "dataEvents":[{"type":"change"}]},
"title":true,
"lso":"",
"widthOrg":100,
"resizable":true,
"sortable":true}]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-15 22:09:16

JSON不支持函数的序列化。因此,searchoptions.dataInitsearchoptions.buildSelect和您在colModel中使用的所有其他函数在使用JSON.stringify之后都将被丢弃。

了解您使用的jqGrid/free jqGrid或Guriddo jqGrid JS的哪个版本很重要。从jqGrid 4.7开始,可以用string值在colModel中定义string(参见拉请求)。按照这种方式,您将获得colModel中的主要信息,这些信息可以使用JSON.stringify进行序列化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30266359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档