Kendo UI Grid和组合列

时间:2013-04-11 15:58:55

标签: xml kendo-ui kendo-grid

我将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" } 

                    }

如何渲染'标签'栏?

任何帮助都会受到赞赏!!

2 个答案:

答案 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

}

效果很好!!!

我希望这可以帮助其他朋友。

如果您认为更好或更容易解决方案,欢迎您; - ))