我将Kendo UI网格绑定到用xml填充的数据源。
它对我有用。
现在我想用一个嵌套节点的'n'多个值(逗号分隔)来伪装每一行的单元格。
xml文件示例:
<product id="1">
Microsoft Office
<tags><tag>microsoft</tag></tags>
</product>
<product id="1">
Ububtu Linux
<tags><tag>Canonical</tag><tag>OS</tag><tag>Open Source</tag></tags>
</product>
<product id="1">
Windows 8
<tags><tag>microsoft</tag><tag>OS</tag></tags>
</product>
</product>
我想要的结果:
ID Product Tags
1 Microsoft Office microsoft
2 Ubuntu Linux canonical, OS, Open Source
3 Windows 8 microsoft, OS
对于前2列,没有问题:
$("#grid").kendoGrid({
dataSource: {
type: "xml",
transport: {
read: { url: 'some_remote_xml',
dataType: "xml"
}
},
schema: {
type: "xml",
model: {
fields: {
id: { field: 'product/@id', type: "number" },
Product: { field: 'product/text()', type: "string" }
}
如何渲染'标签'栏?
任何帮助都会受到赞赏!!
答案 0 :(得分:0)
您可以通过以下两种方式之一完成此操作:
1)提供“行模板”,在此处演示:http://demos.kendoui.com/web/grid/rowtemplate.html
或
2)您可以在网格中使用自定义template
作为列设置。
对于自定义模板,您需要在网格中列出所需的所有列,然后为应显示自定义信息的列提供template
设置。
最简单的方法是将template
设置为一个函数,该函数接收当前数据行作为参数。然后,您可以使用.join
,
标记并返回该标记。
$("#grid").kendoGrid({
dataSource: {
// ... your data source here
},
columns: [
{field: "id", title: "Product ID"},
{field: "product", title: "Product Name"},
{
title: "Tags",
template: function(dataRow){
return dataRow.tags.join(", ");
}
]
});
使用KendoUI的模板引擎可能有更好的方法来完成这项工作,但这至少会让你现在显示以逗号分隔的项目列表。
您可以在此处阅读有关列模板的信息:http://docs.kendoui.com/api/web/grid#configuration-columns.template
答案 1 :(得分:0)
非常感谢Derik和OnaBai。
我知道解决方案可以通过一种剑道模板......但难以实现这样的解决方案。
我的应用程序的真实代码有很多复杂性。
在上面的示例中,wi不仅会管理'tag'节点,还会管理属性等....
类似的东西:
<tags>
<tag id="1">First tag</tag>
<tag id="2">Second tag</tag>
...
</tags>
如果架构部分中的此片段返回产品ID(产品的xml id属性):
id: { field: 'product/@id', type: "number" }
...并返回产品文本(xml文本节点):
Product: { field: 'product/text()', type: "string" }
如何在模板中管理一个或多个返回的标签?
Tags: { field: 'product/tags' }
我必须实现一个管理'tag'子节点数组的模板。
确定。
我找到了这个解决方案:
列的模板定义:
//pass the 'Tags' array to a javascript function
template: '#= myfunction(Tags) #'
...然后是全局javascript函数:
function myfunction(e) {
var result = '';
//iteration on the 'tags' array
for (var i = 0; i < e.length ; i++) {
result += '<a href="' + e[i]["@id"] + '">' + e[i]["#text"] + '</a>';
}
return result; // now in the tags column of the grid we have the 'tags/tag' xml section of each product, rendered as html anchor
}
效果很好!!!
我希望这可以帮助其他朋友。
如果您认为更好或更容易解决方案,欢迎您; - ))