情况:
kendo DataSource
var ordersDataSource = new kendo.data.DataSource({
type: "odata",
transport: {
read: {
url: "http://localhost/odata.svc/Orders?$expand=OrderDetails"
}
},
schema: {
type: "json",
data: function(response){
return response.value;
}
total: function(response){
return response['odata.count'];
}
},
serverPaging: true,
serverFiltering: true,
serverSorting: true
})
从odata源读取的json数据如下:
{
odata.metadata: "xxxx",
odata.count: "5",
value: [
{
OrderId: 1,
OrderedDate: "2013-02-20",
OrderInfoA: "Info A",
OrderInfoB: "Info B"
OrderDetails: [
{
OrderDetailId: 6,
OrderDetailInfoC: "Info C",
OrderDetailInfoD: "Info D"
},
{
//Another OrderDetail's data
}
]
},
{
// Another Order's data
}
]
}
问题1 :
1.如果我想定义一个“计算”属性: OrderedDateRelative ,它应该是今天(2013-02-25)和创建订单日之间的天数(2013- 02-20),赞:“5天前”,我如何在客户端实现这一目标?
回答问题1:http://jsbin.com/ojomul/7/edit
问题2 - 更新 -
2.Every Order有它的嵌套属性OrderDetails,那么是否可以为嵌套的OrderDetails属性定义一个计算字段?例如:每个OrderDetail的 OrderDetailInfoCAndD ,值应为: OrderDetailInfoC + OrderDetailInfoD ,即“Info C Info D”?
谢谢,
院长
答案 0 :(得分:6)
您可以通过指定数据源的模型来创建计算字段:
dataSource = new kendo.data.DataSource({
data: [
{ first: "John", last: "Doe" },
{ first: "Jane", last: "Doe" }
],
schema: {
model: {
// Calculated field
fullName: function() {
return this.get("first") + " " + this.get("last");
}
}
}
});
这是一个现场演示:http://jsbin.com/ojomul/1/edit
答案 1 :(得分:2)
这是一种在Kendo Grid中使用计算字段的方法。
var crudServiceBaseUrl = "http://demos.telerik.com/kendo-ui/service",
dataSource = new kendo.data.DataSource({
transport: {
read: {
url: crudServiceBaseUrl + "/Products",
dataType: "jsonp"
}
},
pageSize: 20,
schema: {
model: {
total: function (item) {
return this.UnitPrice * this.UnitsInStock;
}
}
}
});
$("#grid").kendoGrid({
dataSource: dataSource,
pageable: true,
height: 550,
sortable: true,
filterable: true,
toolbar: ["create"],
columns: [
{ field: "UnitPrice", title: "Unit Price"},
{ field: "UnitsInStock", title: "Units In Stock", width: "120px" },
{ field: "total()", title: "Total" }]
});
答案 2 :(得分:1)
下面一个在网格中使用它的示例。然后它也可以对列进行排序。
$("#grid").kendoGrid({
dataSource: {
data: [
{ first: "John", last: "Doe" },
{ first: "Jane", last: "Doe" }
],
schema: {
model: {
// Calculated field
fullName: function() {
return this.first + " " + this.last;
},
fields: {
first: { type: "string" },
last: { type: "string" }
}
}
}
},
columns: [
{
// Trigger function of the Calculated field
field: "fullName()",
title: "Fullname"
},
{
field: "first",
title: "firstname"
}
]
});