2012-01-11 112 views
2

我很困惑,何時何地我應該聲明我的viewModel時使用映射插件。Knockout JS映射插件混淆

這是我的JSON文件:

{ 
    "members": [ 
     { 
      "memberid": "001", 
      "membername": "Jason" 
     }, 
     { 
      "memberid": "002", 
      "membername": "Bob" 
     } 
    ] 
} 

這裏是HTML模板:

<div data-bind="foreach: members"> 
<h3 data-bind="text: memberid"></h3> 
<p>Name: <span data-bind="text: membername"></span></p> 
</div> 

這裏是休息:

var data = $.getJSON("members.json",function(data) 
      { 
       var viewModel = ko.mapping.fromJSON(data); 
       ko.applyBindings(viewModel); 

      } 
     ); 

ko.mapping.fromJSON(data, viewModel); 

預先感謝您的幫助!

回答

6

你可能想要在閉包之外聲明你的viewModel,所以它更容易訪問。例如:

var viewModel = {}; 
var data = $.getJSON("members.json",function(data) 
      { 
       viewModel.model = ko.mapping.fromJSON(data); 
       ko.applyBindings(viewModel); 
      } 
     ); 

這將創建視圖模型,使其訪問,並公開模型屬性(它將包含所有映射的數據)。您可以跳過模型屬性,並在vm上執行。你甚至可以將applyBindings移到這之外,因爲你真的只想運行一次。

+0

謝謝!幾乎在那裏......我得到一個無法解析錯誤。 「成員沒有定義。」 – user1143632 2012-01-12 02:30:58

+0

在jsfiddle中發佈你的代碼,我們可以幫助看看 – 2012-01-13 18:14:50

+0

該映射正在創建'viewModel.model.members',我會通過調用具有映射和視圖模型參數的函數來修改現有視圖模型,並忽略返回值,所以你有'viewModel.members':'ko.mapping.fromJSON(data,{},viewModel);' – 2012-05-28 22:36:13