2013-05-16 19 views
1

我想将字符串数组分配给handsontables列作为自动完成。我从AJAX调用中获取这个JSON数据。在JavaScript中将字符串数组从JSON分配给Handsontables对象?

我不会分配到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

回答

0

你的 “回归改编;”不返回到“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 + ''); 
    } 
} 

我希望这有助于

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"); 
}); 

在分配给所述源的关键是源函数中的进程参数。

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

相关问题