可手持-通过ajax获取数据,并在一列上设置自动完成


Handsontable - get data via ajax and set autocomplete on one column

我正试图通过ajax将数据拉入可手持电子表格插件(这很有效)。我有一个数组,我想在一列上自动完成。我的输出是一个空白的电子表格。如果我完全注释掉"列"部分,它就可以完美地工作——没有自动完成。请帮我弄清楚。这是我的代码:

<HTML>
<HEAD>
<script src="./lib/jquery.min.js"></script>
<script src="./dist/jquery.handsontable.full.js"></script>
<link rel="stylesheet" media="screen" href="./dist/jquery.handsontable.full.css">
<script src="./lib/jquery-ui/js/jquery-ui.custom.min.js"></script>
<link rel="stylesheet" media="screen" href="./lib/jquery-ui/css/ui-bootstrap/jquery-ui.custom.css">
<script>
$(document).ready(function () {
    first = true;
    $("#controllers").handsontable
    ({
        autoWrapRow: true,
        columns:[{},{},{
            //type: 'autocomplete',
            //source: ["A", "B", "C", "D", "E", "F"],
            //strict: true,
            //allowInvalid: false //true is default
        }]
    });
    var controllers = new Array();
    $.ajax
    ({
        url:"./get_controllers.php",
        type:"POST",
        dataType:"json",
        success:function(msg)
        {
            controllers = msg;
            $("#controllers").handsontable("loadData", controllers);
        }
    });
});
</script>
</HEAD>
<BODY>
        <div id="controllers" class="dataTable"></div>
</BODY>
</HTML>

首先,如果覆盖columns属性,则需要自己设置所有值(例如,请参阅此jsFiddle

要回答关于自动完成的更具体的问题,您需要将自动完成的源定义为类似于以下函数的函数:(另请参阅jsFiddle)

function (query, process){
    var msg = getJson(); //this is to simulate an Ajax Call
    process(msg.Colors);
}

我认为您需要指定数据属性。这是我的对象源代码(用于数组源http://handsontable.com/demo/datasources.html):

1)加载数据:

$parent.find('button[name=load]').click(function () {
$.ajax({
    url: "/userajax/getmechanic/?id="+pid,
    type: 'GET',
    context: document.body
}).done(function(resp) {
        jsonObj = JSON.parse(resp);
        //load data to source
        objectData = jsonObj.data;
        $container.handsontable('render');
    });});

2)设置:

function setTable($container){
$container.handsontable({
    data: objectData,
    startRows: 5,
    columns: [
        {data: "id", readOnly: true},
        {   data:"user",
            type: 'autocomplete',
            source: users,
            strict: false
        }],
       ...