2013-10-25 30 views
0

我使用RESTful WebAPI服務來返回帶有超媒體鏈接的JSON,然後嘗試使用KnockoutJS映射解碼到視圖模型中,並且它仍然失敗,但不明白爲什麼。我不得不手動解析字符串化的JSON,這意味着我的客戶端現在變成了對象特定的東西,從而消除了我之後的解決方案的靈活性。使用包含超媒體鏈接的JSON使用Knockout映射

下面的簡單示例返回單個餐廳的詳細信息,其中包含一些預訂或電子郵件的操作。

這裏是JSON

{ 
    "Id": 1, 
    "Name": "Kings Head", 
    "NickName": "Kings", 
    "_links": { 
     "book": { 
      "href": "/resturant/1/book", 
      "title": "Book" 
     }, 
     "email": { 
      "href": "/resturant/1/email", 
      "title": "Email" 
     }, 
     "self": { 
      "href": "/resturant/1" 
     } 
    } 
} 

的作品是代碼:

var viewModel = { 
    Name: ko.observable(), 
    NickName: ko.observable() 
}; 

$.getJSON('http://localhost:8080/resturants/1', function (jsonResult) { 
    var str = JSON.stringify(jsonResult); 
    var parsed = JSON.parse(str); 
    viewModel.Name = (parsed.Name); 
    viewModel.NickName = (parsed.NickName); 
    ko.applyBindings(viewModel); 
}) 

如果我嘗試使用:

viewModel = ko.mapping.fromJS(jsonResult); 

失敗。

任何幫助表示讚賞。

非常感謝,

肖恩

+0

它失敗時會給你什麼樣的錯誤?這應該顯示在調試器控制檯中。您是否嘗試過在回調中設置斷點並手動檢查'jsonResult'以確保它是正確的數據? – scaryman

回答

0

如果您使用的是jsonResult直接從服務電話,我以爲你是,那麼你需要viewModel = ko.mapping.fromJSON(jsonResult);時退房fiddle每個場景設置。

+0

非常感謝,答案確實是'codeviewModel = ko.mapping.fromJS(jsonResult)',然後應用綁定。感謝幫助。 –