在javascript中将JSON中的字符串数组分配给Handsontables对象?

时间:2013-05-16 17:21:03

标签: json jquery handsontable

我正在尝试将字符串数组分配给handsontables列作为自动完成。我从AJAX调用中获取此JSON数据。

我无法分配到source:。请遵守代码。

    var loadBU = function(data) {          
                $.ajax({
                 url: "/EditInitiatives.svc/GetBUData",
                 data: "clientId=" + $value.val(),
                 type: "GET",
                 contentType: "application/json; charset=utf-8",
                 dataType: "json",
                 success: function (res) {                      
                     data(res);
                 },
                 error: function (error) {
                     alert("Error: " + error.responseText);
                 }
                });    
              };    

    $("#example2").handsontable({
        data: getCarData(),
        startRows: 7,
        startCols: 4,
        columns: [
                  {  data:'BusinessUnit',
                     type:'autocomplete',
                     source:loadBU(function(output){                            
                               var results = output.d                         
                               var arr = [], item;
                               for (var i = 0, len = results.length; i < len; i++) {
                                    item = results[i];
                                    arr.push([[item]]);
                                }
                                return arr;
                            }),      
                        strict: true
                     },
               ]
       });

它假设与EX: source: ["yellow", "red", "orange", "green", "blue", "gray", "black", "white"],

相似

enter image description here

我不明白如何将数组分配给源。

Reference

2 个答案:

答案 0 :(得分:0)

你的“回归arr;”不返回“source:”,它返回“loadBU”函数。

例如,你可以这样做:

             success: function (res) {                      
                 var arr = data(res);
             },

这就是没有被分配的原因。

尝试在$("#example2").handsontable({之前调用Ajax并将其保存到someVariable,然后设置source: someVariable

根据您的Ajax调用返回的内容,您可能还需要进行一些操作。例如,我需要遍历并加载到数组中:

function AppendToArray(ajaxValues, theArray) {
    for (var i = 0; i < ajaxValues.length; i++) {
        theArray.push('' + ajaxValues[i].Text + '');
    }
}

我希望这会有所帮助

答案 1 :(得分:0)

我这样用:

var workers = null;
$.ajax({
    url: siteUrl + "/Worker/Get",
    dataType: 'json',
    type: 'GET',
    cache: false
})
.done(function (data) {
    $("#worker-grid").handsontable({
        data: data,
        rowHeaders: true,
        colHeaders: ["internal<BR />identification", "name", "mobile", "e-mail address", "national<BR />identification", "partner", "source"],
        colWidths: [100, 150, 100, 250, 150, 150, 100],
        columns: [
            { data: "intId" },
            { data: "name" },
            { data: "mobile" },
            { data: "mail" },
            { data: "extId" },
            {
                data: "partner", type: 'dropdown', source: function (query, process) {
                    $.ajax({
                        url: siteUrl + "/Partner/Get",
                        dataType: 'json',
                        type: 'GET',
                        cache: false
                    })
                    .done(function (data) {
                        var values = [];
                        for (i in data) values.push(data[i].name);
                        process(values);
                    });
                }
            },
            { data: "source" }
        ],
        columnSorting: true,
        minSpareRows: 1
    });
    workers = $("#worker-grid").data("handsontable");
});

分配给源的关键是源函数中的 process 参数。

我想补充一点,这种方法将在每次使用时从服务器获取数据。我上面的例子使用了一个没有意义的下拉列表。但是当使用自动完成时它是正确的方法。