Grid 剑道-网格-与复杂对象聚合
我有一个剑道UI网格。网格有一个包含复杂对象数据的数据源。例如,{“foo”:{“bar”:10}。尽管column字段可以在对象图(即foo.bar)中导航,但aggregate字段似乎无法导航 代码如下:Grid 剑道-网格-与复杂对象聚合,grid,aggregate,kendo-ui,complextype,Grid,Aggregate,Kendo Ui,Complextype,我有一个剑道UI网格。网格有一个包含复杂对象数据的数据源。例如,{“foo”:{“bar”:10}。尽管column字段可以在对象图(即foo.bar)中导航,但aggregate字段似乎无法导航 代码如下: var grid = $("#grid").kendoGrid({ dataSource: { data: [ {"foo": {"bar": 10}}, {"foo": {"bar": 20}} ],
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");
这是小提琴:
Firebug在kendo.all.min.js的第8行报告“TypeError:data.foo未定义”
我做错什么了吗?如果这是剑道中的一个错误,有没有办法解决这个问题?我必须使对象保持复杂。不可能在聚合中包含复杂对象,因为用于计算它的动态生成函数认为
foo.bar
是字段的名称(仅一个字段)
你真的需要那个复杂的领域吗
我可能理解,服务器(提供网格数据)发送复杂的foo
,但您始终可以使用数据源中的parse
或data
函数将其展平。大概是这样的:
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\u bar
,并将其用于聚合。这里是剑道支持部门提供的“更好”anwser:
您正在经历的行为是由于您指定的“路径”将用作聚合结果创建的映射中的键。生成类似于以下内容的对象:
{“foo.bar”:{sum: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");
这是正确的。服务器返回一个大型复杂对象。我只能展平聚合中所需的列。虽然有很多列,而且数据集可能很大,但听起来平坦化是唯一的方法(或者在footerTemplate中使用函数并在该函数中构建我自己的聚合)。谢谢你的帮助。