为什么我不能将数组分配给jqgrid列?

时间:2016-09-18 14:53:21

标签: jquery jqgrid

我已经编写了以下代码来从数组生成列和列模型,有趣的是,当我在jqgrid中硬编码生成的数组时,如下所示它会生成teh列,但是当将数组放入变量然后将其分配给colModel它不会生成列。为什么这样,我该如何解决这个问题?

完整的代码位于底部

我正在使用http://www.trirand.com/blog/jqgrid/jqgrid.html

的JQGrid

" https://cdnjs.cloudflare.com/ajax/libs/jqgrid/4.6.0/js/jquery.jqGrid.min.js"

以下是硬编码代码:

//hard coding the array
    $('#myGrid').jqGrid({
        datatype: "local",
        height: 250,
        //colNames:modelArr,
        colModel:[{name:' 9/10/2014'}, {name:' 1/1/2014'}, {name:' 2/10/2014'}],
        viewrecords: true,
        multiselect: true,
        caption: "Manipulating Array Data"
    });

以下是完整的代码:

    var colsArray =[];
    var modelArr = [];

    $.ajax({
        url:'http://localhost:53721/Home/GetPurchases',
        dataType:'json',
        success:function(data){
            colsArray=data;

            var str='';

            if(data.length > 0 ){
                str = data[0].PurchaseDates;
                console.log(str);
               colsArray = str.split(',');
            }


            for(var i=0; i < colsArray.length;i++){
                var tmp = {name:colsArray[i]};
                modelArr[i]=tmp;
            }

            //console.log(JSON.stringify(modelArr));

        },
        error:function(){}

    });

    var d1 = JSON.stringify(modelArr);
    console.log(d1);

    $('#myGrid').jqGrid({
        datatype: "local",
        height: 250,
        //colNames:modelArr,
        colModel:[modelArr],         //[{name:' 9/10/2014'}, {name:' 1/1/2014'}, {name:' 2/10/2014'}],
        viewrecords: true,
        multiselect: true,
        caption: "Manipulating Array Data"
    });

2 个答案:

答案 0 :(得分:0)

当你对它进行硬编码时它正在工作的原因:colModel需要一个数组,但当你试图动态地创建它时,它会以String形式出现。

//use below methods:
// call below functions at grid
----
----
colNames:getColNames(result.colNames), //["Plan_code", "LOB"],
colModel:getColModels(result.colNames),
----
----

//define these function
function getColNames(columndata) {
    var keys = [];
    for(var key in columndata) {
        if (columndata.hasOwnProperty(key)) {
            keys.push(columndata[key]);
        }
    }
    return keys;
}

function  getColModels(modelData) {
    var colNames= getColNames(modelData);
    var colModelsArray = [];
    for (var i = 0; i < colNames.length; i++) {
        var str;
        if (i === 0) {
            str = {
                name: colNames[i],
                index:colNames[i],
                key:true,
                editable:true
            };
        } else {
            str = {
                name: colNames[i],
                index:colNames[i],
                editable:true
            };
        }
        colModelsArray.push(str);
    }

    return colModelsArray;
}

答案 1 :(得分:0)

在将colModel指定给数组时删除方括号,因为保持它会生成数组数组。

var myGrid = $("#myGrid").jqGrid({
    datatype: "local",
    height: 250,
    colModel:modelArr,
    viewrecords: true,
    multiselect: true,
    caption: "Manipulating Array Data"
});

这是使用您提供的代码的工作sample
我还在样本的末尾添加了两行,以显示两个赋值形状之间的差异,如下图所示

array vs array of array