Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Kendo UI Combobox中将项目手动添加到数据源中_Javascript_Jquery_Kendo Ui - Fatal编程技术网

Javascript 如何在Kendo UI Combobox中将项目手动添加到数据源中

Javascript 如何在Kendo UI Combobox中将项目手动添加到数据源中,javascript,jquery,kendo-ui,Javascript,Jquery,Kendo Ui,我有一个组合框,由从servlet接收的JSON字符串填充 $(document).ready(function() { //Combobox Init (From Servlet) var comboBoxDataSource = new kendo.data.DataSource({ transport : { read : { url : "net/samso/action/common/ComboAc

我有一个组合框,由从servlet接收的JSON字符串填充

$(document).ready(function() {
    //Combobox Init (From Servlet)
    var comboBoxDataSource = new kendo.data.DataSource({
        transport : {
            read : {
                url : "net/samso/action/common/ComboAction?flag=SRCHGT_IO_GB", // url to remote data source 
                dataType : "json",
                type : 'GET'
            }
        },
        schema : {
            model : {
                fields : {
                    key : {
                        type : "string"
                    },
                    value : {
                        type : "string"
                    }
                }
            }
        }
    });

    //Manually add an item
    comboBoxDataSource.add({key: "062", value: "Total"});

    //Initialize Combobox
    $("#cb_srchgt_io_gb").kendoComboBox({
        dataSource : comboBoxDataSource,
        dataTextField : "value",
        dataValueField : "key"
    })
});
在我尝试手动向datasource
comboBoxDataSource.add({key:“062”,value:“Total”})添加一项之前,代码工作正常。添加该项时,它将删除从数据源中的JSON数据填充的其他项


为什么会发生这种情况?

问题在于数据源是异步初始化的,我的意思是,当
组合框
初始化时,您就开始加载,但直到从服务器接收到数据后,操作才结束。然后,也只有在那时,您才应该调用该元素。将
add
语句移动到示例代码的末尾甚至是不可接受的,因为从服务器加载可能需要毫秒或秒

如果要将元素添加到从服务器接收的内容中,可以使用:

$(document).ready(function () {
    //Combobox Init (From Servlet)
    var comboBoxDataSource = new kendo.data.DataSource({
        transport: {
            read: {
                url     : "net/samso/action/common/ComboAction?flag=SRCHGT_IO_GB", // url to remote data source 
                dataType: "json",
                type    : 'GET'
            }
        },
        schema   : {
            model: {
                fields: {
                    key  : { type: "string" },
                    value: { type: "string" }
                }
            },
            data: function(result) {
                //Manually add an item
                result.push({key: "062", value: "Total"});
                return result
            }
        }
    });

    //Initialize Combobox
    $("#cb_srchgt_io_gb").kendoComboBox({
        dataSource    : comboBoxDataSource,
        dataTextField : "value",
        dataValueField: "key"
    })
});
您可以使用
requestEnd
事件执行相同的操作,并将额外的元素推送到
e.response

requestEnd: function (e) {
    console.log("e", e);
    e.response.push({key: "062", value: "Total"});
}

基本上,从服务器接收数据后触发的任何事件都是正常的。

感谢您的响应。我希望手动添加的元素位于列表的顶部,而不是附加在底部。有什么办法吗?用
unshift
代替
push