2012-01-11 11 views
2

マッピングプラグインを使用しているときに、いつviewModelを宣言しなければならないのか、どこでどこを宣言するべきか混乱します。あなたの援助のため、事前にノックアウトJSマッピングプラグインの混乱

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

      } 
     ); 

ko.mapping.fromJSON(data, viewModel); 

ありがとう:

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

は休みです:

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

はここでHTMLテンプレートです:

は、ここに私のJSONファイルです!

答えて

6

viewModelをクロージャの外に宣言して、アクセスしやすくすることができます。たとえば:

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

これは、(すべてのマッピングされたデータが含まれていることになる)、それがアクセスできるよう、ViewModelにを作成し、モデルのプロパティを公開します。あなたはモデルのプロパティをスキップし、VM上でそれを行うこともできます。あなたは実際に一度だけ実行したいので、applyBindingsをこれ以外の場所に移動することもできます。

+0

ありがとうございます!ほぼそこに...私はエラーを解析できません。 "メンバーは定義されていません。" – user1143632

+0

あなたのコードをjsfiddleに投稿してください。 –

+0

マッピングは 'viewModel.model.members'を作成しています。私はそれをマッピングと表示のモデルパラメータで関数を呼び出し、リターンを無視して既存のビューモデルをudpateするように変更しますあなたは 'viewModel.members'を持っています:' ko.mapping.fromJSON(data、{}、viewModel); ' –