我正在尝试将字符串数组分配给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"],
我不明白如何将数组分配给源。
答案 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 参数。
我想补充一点,这种方法将在每次使用时从服务器获取数据。我上面的例子使用了一个没有意义的下拉列表。但是当使用自动完成时它是正确的方法。