2013-10-24 2 views
2

У меня есть OData результат, как этотКак получить единый результат на kendo.data.Datasource

 {"odata.metadata":"https://localhost/DocTalkMobileWebApiOData/odata/$metadata#MasterPatient/@Element","PatUniqueId":"39e713db-6a0e-4e59-bf7b-033f4fc47ad5", "PatID":null, 
"pat_lname":"White","pat_fname":"Peter","pat_mi":"  ","pat_ssn":"270787655","pat_dob":"08/07/1973","pat_sex":"M","pat_status":null,"priInsID":2,"secInsID":1,"PCPID":1,"InternalDrID":1,"EXPID":1,"EXPDate":"","pat_phone":null,"isNew":true,"imported":true,"byWhom":"dt","lastUpdate":"2011-03-30T09:41:57.36","changeStamp":"AAAAAAAAIUE=","address":"","city":"","state":"","zip":"","currentMcp":"","currentVisitCount":-2,"otherId":"543674","pcpName":null,"hasChanges":true,"ProgramSource":null,"mrnID":"","createdBy":null,"createdDate":"2007-10-26T10:16:15","expLocation":null,"ethnicId":1,"prefLanguageId":1,"raceId":1 
    } 

и я пытался получить этот результат через kendo.ui.datasource:

newPatient = new kendo.data.DataSource({ 
     type: 'odata', // <-- Include OData style params on query string. 
     transport: { 
      read: { 
       url: url + '/MasterPatient(guid\'00000000-0000-0000-0000-000000000000\')', // <-- Get data from here 
       dataType: "json" // <-- The default was "jsonp" 
      }, 

      parameterMap: function (options, type) { 
       var paramMap = kendo.data.transports.odata.parameterMap(options); 

       delete paramMap.$inlinecount; // <-- remove inlinecount parameter. 
       delete paramMap.$format; // <-- remove format parameter. 

       return paramMap; 
      } 
     }, 
     schema: { 
      data: function (data) {     
       return data; 
      }, 
      total: function (data) {     
      return data['odata.count'] 
      }, 
     } 
    }); 
    newPatient.fetch(function() { 
     kendo.bind($('#newPatientTab'), newPatient); 
    }); 

Но не уверен, почему он всегда бросает ошибку:

Uncaught TypeError: Object [object global] has no method 'slice' 

Пожалуйста, помогите мне. Спасибо

+0

Что вы имеете в виду 'Single Result'? Будет ли этот URL-адрес odata возвращать один результат всегда независимо от запроса odata? –

+0

@Jayantha да, я имею в виду, что это всего лишь одна запись :) –

ответ

6

В пользовательском интерфейсе Kendo DataSource работает только с массивами. Если вы можете изменить ответ сервера, чтобы отправить что-то вроде этого

[{"odata.metadata":"https://localhost/DocTalkMobileWebApiOData/odata/$metadata#MasterPatient/@Element","PatUniqueId":"39e713db-6a0e-4e59-bf7b-033f4fc47ad5","PatID":null,"pat_lname":"White","pat_fname":"Peter","pat_mi":"  ","pat_ssn":"270787655","pat_dob":"08/07/1973","pat_sex":"M","pat_status":null,"priInsID":2,"secInsID":1,"PCPID":1,"InternalDrID":1,"EXPID":1,"EXPDate":"","pat_phone":null,"isNew":true,"imported":true,"byWhom":"dt","lastUpdate":"2011-03-30T09:41:57.36","changeStamp":"AAAAAAAAIUE=","address":"","city":"","state":"","zip":"","currentMcp":"","currentVisitCount":-2,"otherId":"543674","pcpName":null,"hasChanges":true,"ProgramSource":null,"mrnID":"","createdBy":null,"createdDate":"2007-10-26T10:16:15","expLocation":null,"ethnicId":1,"prefLanguageId":1,"raceId":1}] 

тогда он будет работать нормально. N.B. Это в формате массива.

ИЛИ

Вы можете обернуть один объект в массив на стороне клиента, в функции данных схемы.

schema: { 
    data: function(server-response) { 
    return [server-response]; 
    } 
} 

Команда Kendo должна уделять больше времени хорошей документации.

+0

Да, сейчас она отлично работает. Я нашел еще один способ его реализации: $ .getJSON (url + '/ MasterPatient (guid \' 00000000-0000-0000-0000-000000000000 \ ')', функция (данные) { newPatient = new kendo.observable (данные); kendo.bind ($ ('# newPatientForm'), newPatient); }); –

+0

Использование guid для передачи данных не является хорошей идеей. Это не общий характер. – Subrata

+0

Вы можете принять ответ, если он разрешил вашу проблему. Не оставляйте вопрос открытым. – Subrata

3

Это означает, что вы не используете источник одаты из резервной копии. Вам нужно подумать, что вам действительно нужен источник kendo odata от клиента в этом случае, если ваш back-end не поддерживает odata.

Смотрите этот ответ от OData URL, http://services.odata.org/Northwind/Northwind.svc/? $ = Формат JSON

Он возвращает массив объекта в value поле. Если вы не можете изменить скопированный то, что вы можете сделать, это формат данных в функции Schema.data

schema: { 
     data: function (data) {     
      return [data]; 
     }, 

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

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