简体   繁体   English

动态jqGrid不显示数据

[英]Dynamic jqGrid displaying no data

I am making jQuery UI dialogs open with jqGrids (local data at the moment) in them. 我正在使用其中的jqGrids(当前为本地数据)打开jQuery UI对话框。 That part works but when I try to call my grid building function and attach it to a dynamically made DIV , I only get the shell of the jqGrid with the table headings but no data. 该部分有效,但是当我尝试调用网格构建函数并将其附加到动态制作的DIV ,我仅获得具有表标题但没有数据的jqGrid外壳。 Any ideas? 有任何想法吗? Here's the parred down source: 这是简化的源代码:

        var dialog_count = 0;
        var default_grid = {
                datatype: "local", 
                height: 80, 
                rowNum: 10, 
                rowList: [10,20,30], 
                multiselect: true, 
                rowList:[10,20,30], 
                sortname: 'id', viewrecords: true, sortorder: "asc",
                footerrow: true,
                loadui: "block"
        };
        var randomNum = function(){
            return Math.floor(1000000 + Math.random() * 9000000);
        };
        var returnKeys = function(obj){
            var arr = [];
            for (var keys in obj[0]){
                arr.push(keys)
            }
            return arr;
        };
        var createGrid = function(gridInfo,div){
            var gridKeys = returnKeys(gridInfo);
            if (typeof(div) !== "object"){
                div = $('#'+div);
            }

            var details = $.extend({
                data: gridInfo,
                colModel: function(){
                    var arr = [];
                    var colnam = gridKeys;
                    $.each(colnam, function(index,value){
                        arr.push({name: value,index:value,width:80 })
                    });
                    return arr;
                }()
            },default_grid);
            var rand = randomNum();
            var pager = 'pager'+rand;
            var str = '<div id="'+pager+'"></div>';

            var grid = div.append('<table id="aGrid'+rand+'"></table>'+str).find('#aGrid'+rand); 
            var grid_args = $.extend({pager: '#'+pager},details);
            console.log(div)
            grid.jqGrid(grid_args);
        };

        $.fn.createDialog = function(opts,titl,page,tpl){
            var custom = {
                open: function(){ 
                    if(typeof(page) === "string"){
                        $(this).load(page);
                    }
                },
                title: titl
            }

            var veryCustom = $.extend(custom,opts);

            if(typeof(page) === "object"){
                var container = $("body"),
                divName = 'adiv'+dialog_count;
                tpl = (tpl == undefined) ? '' : tpl,
                dlg = container.append('<div id="'+divName
                        +'">'+tpl+'</div>').find('div#'+divName);
                dlg.dialog(veryCustom);

                if(page.length === 1){
                    createGrid(page[0],divName);
                }
            }else{
                $('<div/>').dialog(veryCustom);
            }
            dialog_count++;
        };
        var contentDialog = {
                width: 700,
                height: 200,
                position: [200,300]
        };
        var grid3template = function(obj){
            var str = $('<div class="meta"> \
                <div class="someClass"> \
                    yada yada \
                </div> \
                <div id="someDiv22">more text</div> \
                </div><!-- end class meta --> \
            '
            );
            createGrid(obj.grid3data, str.find("#someDiv22"));
            return str.html();
        };


   var grid1data = [ 
        {id:"<a href='#' class='grid1click'>63028</a>",division:"school",ctype:"building",tnum:'$100',cdate:"2011-02-09",cust:"Big HS",country:"USA",state:"VA"},
    ];
    jQuery("#grid1").jqGrid({ 
        data: grid1data, 
        datatype: "local", 
        height: 80, 
        rowNum: 10, 
        rowList: [10,20,30], 
        colModel:[ 
            {name:'id',index:'id', width:60, sorttype:"int"}, 
            {name:'division',index:'division', width:72},
            {name:'ctype',index:'ctype', width:100}, 
            {name:'tnum',index:'tnum',width:50},
            {name:'cdate',index:'cdate', width:94, sorttype:"date", formatter:"date"}, 
            {name:'cust',index:'cust', width:90},
            {name:'country',index:'country', width:30},
            {name:'state',index:'state', width:30}
        ],
        multiselect: true, 
        rowList:[10,20,30], 
        caption: "Grid 1" ,
        pager: '#plistGrid1', 
        sortname: 'id', viewrecords: true, sortorder: "asc",
        loadui: "block"
    });

    var grid2data = [ {id:"<a href='#' class='grid2click'>1</a>",invdate:"2007-10-01",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"} ];

    var grid3obj = {
        grid3data: [ {name:'<span class="provclick">1st Action Services</span>',ufoc:'AA2143',assoc:'Former Affiliate',city:'Austell',state:'GA',active:'Inactive'},{name:'281-Flooded, Inc.',ufoc:'351',assoc:'Member',city:'Houston',state:'TX',active:'Active'},{name:'Jim Davis Carpet Cleaning & Restoration Services, Inc',ufoc:'AA2177',assoc:'Former Affiliate',city:'Terre Haute',state:'IN',active:'Inactive'},{name:'A Fantabulous Restore Co.',ufoc:'999',assoc:'Member',city:'Disasterville',state:'IN',active:'Active'},{name:'Stellar Restoration Services, Inc',ufoc:'399',assoc:'Affiliate',city:'Bloomington',state:'IL',active:'Active'},{name:'We Do Trees Inc.',ufoc:'778',assoc:'National Partner',city:'Forest Grove',state:'WY',active:'Active'}]
    };

    $('.grid1click').click(function(e){
        e.preventDefault();
        $(this).createDialog(contentDialog,"Grid 2",[grid2data]);
    });

    $('.grid2click').live('click',function(e){
                e.preventDefault();
                $(this).createDialog(contentDialog,'Grid 3',[],grid3template(grid3obj));    
    });

and the HTML: 和HTML:

<table id="grid1"><tr><td>&nbsp;</td></tr></table>
<div id="plistGrid1"></div>

It seems to me that your problem is that you try to create jqGrid for the objects which are just jQuery detached object. 在我看来,您的问题是您尝试为只是jQuery 分离对象的对象创建jqGrid。 In the function grid3template you create 在函数grid3template创建

<div id="someDiv22">more text</div>

but not place it on the page . 不要将其放在页面上 Then inside of createGrid function you use 然后在createGrid函数中使用

var grid = div.append('<table id="aGrid'+rand+'"></table>'+str).find('#aGrid'+rand);
...
grid.jqGrid(grid_args);

I suppose to solve the problem you should place the div#someDiv22 somewhere on the page (inside of the body ) and only after that create the grid with grid.jqGrid(grid_args) . 我想解决该问题,您应该将div#someDiv22放置在页面上的某个位置( body内部),然后再使用grid.jqGrid(grid_args)创建网格。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM