2013-10-24 18 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

給你'單Result'意味着什麼數據格式?無論odata查詢,此odata網址是否都會返回一個結果? –

+0

@Jayantha是的,我的意思是它只是一個單一的記錄:) –

回答

6

在Kendo UI中,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.它是數組格式。

OR

你可以用單個對象到在客戶端陣列,模式的數據函數內。

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

劍道團隊應該把更多的時間放在良好的文檔上。

+0

是的,它現在工作正常。 我發現了另一種實現方法: $ .getJSON(url +'/ MasterPatient(guid \'00000000-0000-0000-0000-000000000000 \')',function(data){ newPatient = new kendo.observable (data); kendo.bind($('#newPatientForm'),newPatient); }); –

+0

使用guid調用數據不是一個好主意。這不是通用的。 – Subrata

+0

如果解決了您的問題,您可以接受該答案。不要讓問題保持開放。 – Subrata

3

這意味着你沒有使用支持的odata源。在這種情況下,如果您的後端不支持odata,您需要考慮這裏是否真的需要客戶端kendo odata源碼。

見從OData的網址,http://services.odata.org/Northwind/Northwind.svc/?$格式= json的這種反應

應該在value場返回對象的數組。 如果你不能改變備份,你可以做的是在Schema.data功能

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