Kendo在ComboBox和TreeList之间共享数据源

时间:2016-09-09 22:17:53

标签: kendo-ui kendo-datasource

我的应用程序有一个Kendo TreeList和一个Kendo ComboBox。 TreeList的DataSource也可用于ComboBox。如果这是可能的,它将阻止我必须两次运行相同的查询。

我的TreeList使用传输进行CRUD操作似乎更复杂。

我的共享数据源示例:

        var sharedDataSource = new kendo.data.DataSource({
            transport: {
                read: function (e) {
                    webService.getData(arg1, arg2).then(function (response) {
                        e.success(response.data);
                    }, function (response) {
                        console.log(response);
                    });
                }
            }
        });

       sharedDataSource.read();

我的TreeList的传输部分:

transport: {
    read: function (e) {
       e.success(sharedDataSource);//sharedDataSource has NO data here. That's the problem
    }
}

组合框:

            $("#comboBox").width(250).kendoComboBox({
                dataTextField: "name",
                dataValueField: "id",
                dataSource: sharedDataSource//The comboBox is launched via a click after the page loads and DOES have data here
            });

1 个答案:

答案 0 :(得分:0)

DataSource.read()是一种异步方法。当TreeList被初始化时,数据尚未加载,因此它将为空。

使用read方法和Promise解析应该有所帮助:

sharedDataSource.read().then(function () {
    // TreeList init

    // ComboBox init
});

由于TreeList没有分页或分组(假设您一次加载所有树项),您可以使用DataSource.view() method来提取数据并避免不需要的远程请求。

// TreeList and ComboBox transports

transport: {
    read: function (e) {
       e.success(sharedDataSource.view());
    }
}

道场演示:http://dojo.telerik.com/@msagi/EnEnI (假冒远程通话)