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

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

代码工作正常,直到我尝试手动将项目添加到数据源 comboBoxDataSource.add({key: "062", value: "Total"});。添加项目时,它会删除从数据源中的 JSON 数据填充的其他项目。

为什么会这样?

最佳答案

问题是 DataSource 是异步初始化的,我的意思是,您在 combobox 初始化时开始加载,但直到从服务器接收回数据后操作才完成。然后,也只有那时,才是您应该调用该元素的时间。将 add 语句移动到示例代码的末尾甚至是 Not Acceptable ,因为从服务器加载可能需要几毫秒或几秒。

如果你想向从服务器接收到的内容添加一个元素,你可以使用:

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

基本上,从服务器接收到数据后触发的任何事件都可以。

关于javascript - 如何在 Kendo UI Combobox 中手动将项目添加到数据源中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15538649/

相关文章:

javascript - Skitter jQuery Slideshow - 想要设置时间间隔

javascript - 更新由远程数据填充的 Kendo 网格列的值

javascript - 获取单个数据后如何强制 Flatlist 重新渲染?

javascript - 在 meteor 项目中插入javascript代码: best practice

javascript - for (let i in string) {} 等价于 for (let i = 0; i < string.length; i++) {} 吗?

jquery - 删除包装 div 并保持所有子 div 完好无损?

jquery - 将换行符和空格替换为 "+"

javascript - 剑道网格单元格值在保存前更改并恢复为原始值时显示脏标志

javascript - 如何获取kendo ui grid中下拉列表的值?

javascript - jQuery When Done 动态拉取函数调用