【发布时间】:2014-09-23 00:22:17
【问题描述】:
我需要一个 Kendo-UI 网格的下拉菜单,并遇到了以下示例: http://codepen.io/jordanilchev/pen/cnkih?editors=001
但是在这个例子中,下拉菜单的键和显示文本也都包含在网格的数据源中,这看起来很多余。我在 Telerik 的网站上查看了一个类似的例子,那里也是一样的。
这里是类型下拉菜单的数据源:
var types = [
{
"Type": "FB",
"Name": "Facebook"
},
{
"Type": "TW",
"Name": "Twitter"
},
{
"Type": "YT",
"Name": "YouTube"
},
{
"Type": "PI",
"Name": "Pinterest"
}
];
到目前为止一切顺利。但这里是实际网格的数据 - 请注意它还包含每条记录的类型和名称:
var products = [{
"ProductID": 1,
"ProductName": "Chai",
"Type": {
"Type": "FB",
"Name": "Facebook"
}
}, {
"ProductID": 2,
"ProductName": "Chang",
"Type": {
"Type": "FB",
"Name": "Facebook"
}
}...
我的预期是只有类型必须在网格的数据源中 - 像这样:
var products = [{
"ProductID": 1,
"ProductName": "Chai",
"Type": "FB",
}, {
"ProductID": 2,
"ProductName": "Chang",
"Type": "FB",
}...
有没有一种方法可以在 Kendo UI 网格中使用下拉菜单,而不必为网格数据源中的每条记录同时包含键和显示文本?换句话说,网格会知道引用下拉列表的数据源来获取单元格的显示文本。
2014 年 9 月 23 日更新: 当下拉列表的数据源是硬编码/本地数组时,CodingWithSpike 提出的解决方案可以正常工作,但是在从服务器加载下拉列表的数据时,我很难让它工作。问题似乎是在读取下拉列表的数据源之前网格已初始化。
为了“模拟”一个 $http 调用来填充数据源,我使用了 setTimeout:
$(document).ready(function () {
var categories = [];
setTimeout(function() {
categories = [{
"value": 1,
"text": "Beverages"
},{
"value": 2,
"text": "Condiments"
},{
"value": 3,
"text": "Confections"
}];
$('#grid').data('kendoGrid').dataSource.read(); // Just as a test, but not even this helps
$('#grid').data('kendoGrid').refresh(); // Just as a test, but not even this helps
}, 1000);
当数据按上述方式(或通过 $http)加载时,下拉字段现在包含值 (id) 而不是文本。这是一个显示这一点的 plunker: http://plnkr.co/edit/DWaaHGVAS6YuDcqTXPL8?p=preview
请注意,真正的应用程序是 AngularJs 应用程序,我宁愿不使用一些 jQuery hack 等到下拉数据可用然后创建网格元素。
如何处理来自服务器的数据?
【问题讨论】:
标签: javascript kendo-ui telerik