2012-11-29 24 views
7

我是非常新的淘汰賽,並且正在創建一個想要獲得淘汰賽的好處的jquery移動應用程序。我已經花了最後一天抨擊我的頭牆對一個非常簡單的問題..我已經刪除了代碼,並與手動綁定(因此幾乎擊敗使用KO的jQuery的目的)..無論如何,如果有人可以告訴我如何改變我必須使用KO的真正力量,那麼對我來說,這將是一個偉大的點。任何代碼的例子,我能找到的人總是更復雜的問題比這(處理陣列等)基本Knockout JS映射到單個JSON對象

我的JSON:

{"id":9,"fullName":"John Doe","firstName":"John","lastName":"Doe","referenceNumber":"BUY-08","position":"Buyer","type":"Buyer","telephone":"028 82 240780","email":"[email protected]","departmentId":3,"departmentName":"DEPT B","country":"United Kingdom"} 

我的HTML:

​​

我的javascript:

$(document).ready(function() { 

    function DetailsViewModel() { 
     var self = this; 
     self.fullName = ko.observable(""); 
     self.reference = ko.observable(""); 
     self.email = ko.observable(""); 
     self.position = ko.observable(""); 
     self.departmentName = ko.observable(""); 
     self.country = ko.observable(""); 

     var success = function (data) { 
      self.fullName(data.fullName); 
      self.reference(data.referenceNumber); 
      self.email(data.email); 
      self.position(data.position); 
      self.departmentName(data.departmentName); 
      self.country(data.country); 
      $.mobile.loading('hide'); 
     }; 

     webAPICall("api/user/getcurrentuser", 
      "GET", success); // simple wrapper I'm using for ajax calls 

    } 
    ko.applyBindings(new DetailsViewModel()); 
}); 

任何幫助,非常感謝,謝謝!

回答

5

如果您不需要任何附加功能或計算您的視圖模型,則使用映射插件非常簡單。你應該通過你的JSON到ko.mapping.fromJS:

var viewModel = {}; 

function success(data) { 
    viewModel = ko.mapping.fromJS(data); 
    ko.applyBindings(viewModel); 
} 
webAPICall("api/user/getcurrentuser", "GET", success); 

使用fromJS功能,如果數據是JS對象和fromJSON如果是JSON字符串。並確保您在data-bind屬性和json中具有相同的屬性名稱。

這裏是工作示例:http://jsfiddle.net/axrwkr/5t5fj/50/

+0

那幾乎正是我一直在想圓第一次..不同的是你把ko.applyBindings的成功方法 - 我有它在的document.ready聲明()功能,導致我的數據不顯示。謝謝! – Shorttylad