2013-02-25 6 views
2

Ситуация:Кендо DataSource: Как определить "вычисленный" Свойства для чтения данных из удаленного источника OData

  • кендо 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 
    }) 
    
  • данные JSON считываемые из OData источника, как:

    { 
        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 дней назад", КАК я могу достичь этого на стороне клиента?

Ответ на Question1: http://jsbin.com/ojomul/7/edit

Вопрос 2 - UPDATE -

2.Every Орден имеет свою вложенную собственность ORDERDETAILS, так что можно определить вычисляемое поле для вложенного Свойство OrderDetails? Например: OrderDetailInfoCAndD для каждого OrderDetail, а значение должно быть примерно так: OrderDetailInfoC + OrderDetailInfoD, что такое «Info C Info D»?

Спасибо,

декан

+0

+1 для вопроса 2, который до сих пор не принят. – zacharydl

ответ

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

HI, я отредактировал вашу демонстрацию, http://jsbin.com/ojomul/4/edit, CalculatedField показывается неправильно. – Dean

+2

Это функция - вы должны ее вызывать CalculatedField() –

+1

Да, вызывать ее как функцию работает, спасибо. Другой вопрос: можем ли мы сделать что-то похожее на ** Вложенные свойства ** OrderDetails? См. Мой обновленный вопрос 2 plz. – Dean

2

Вот способ использования расчетного поля в сетке Кендо.

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" }] 
}); 
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" 
     } 
    ] 
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^