我的应用程序有一个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
});
答案 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 (假冒远程通话)