2

我有一个剑道 UI 网格。网格有一个包含复杂对象数据的数据源。例如,{“foo”:{“bar”:10}}。尽管列字段可以导航对象图(即 foo.bar),但聚合字段似乎不能。

这是代码:

var grid = $("#grid").kendoGrid({
   dataSource: {
       data: [
           {"foo": {"bar": 10}},
           {"foo": {"bar": 20}}
       ],

       aggregate: [
           {field: "foo.bar", aggregate: "sum"}
       ]  
   },
   columns: [
       {
           field: "foo.bar",
           footerTemplate: "Sum: #= sum # "
      }
  ]   
}).data("kendoGrid");

这是小提琴:http: //jsfiddle.net/e6shF/1/

Firebug 在 kendo.all.min.js 的第 8 行报告“TypeError: data.foo is undefined”。

我做错了什么吗?如果这是剑道的一个错误,有没有办法解决这个问题?我必须保持对象复杂。

4

2 回答 2

4

这是来自 Kendo Support 的“更好”的答案:

您遇到的行为是由于您指定的“路径”将用作聚合结果创建的地图中的键。生成类似于以下内容的对象:

{“foo.bar”:{总和:30}}

不幸的是,页脚模板生成不支持此构造,因此无法正确解析。对于这种情况,一种可能的解决方法是改用函数。为了说明这一点,我修改了示例。

var grid = $("#grid").kendoGrid({
    dataSource: {
        data: [
            {"foo": {"bar": 10}},
            {"foo": {"bar": 20}}
        ],

        aggregate: [
            {field: "foo.bar", aggregate: "sum"}
        ]
    },
    columns: [
        {
            field: "foo.bar",
            footerTemplate: function(data) { return "Sum: " + data["foo.bar"].sum; }
        }
    ]   
}).data("kendoGrid");
于 2012-11-23T20:38:29.470 回答
1

聚合中不可能有复杂的对象,因为动态生成的评估它的函数认为这foo.bar是字段的名称(只有一个字段)?

你真的需要那个复杂的领域吗?

我可能理解服务器(提供网格的数据)发送的复杂,foo但您始终可以使用数据源中的或函数将其展平。像这样的东西:parsedata

var grid = $("#grid").kendoGrid({
    dataSource:{
        data:[
            {"foo":{"bar":10}},
            {"foo":{"bar":20}}
        ],
        aggregate:[
            {field:"foo_bar", aggregate:"sum"}
        ],
        schema:   {
            parse:function (data) {
                var res = [];
                $.each(data, function (idx, elem) {
                    res.push({ "foo_bar":elem.foo.bar })
                });
                return res;
            }
        }
    },
    columns:   [
        {
            field:         "foo_bar",
            footerTemplate:"Sum: #= sum # "
        }
    ]
}).data("kendoGrid");

我将接收foo.bar到的转换foo_bar为聚合并将其用于聚合。

于 2012-11-15T00:44:20.323 回答