2012-01-11 5 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); 
      } 
     ); 

이 모델 속성 (모든 매핑 된 데이터를 포함하는 것이다), 뷰 모델을 만들고 그것을 액세스 할 수 있도록하고, 노출 것이다. 모델 속성을 건너 뛰고 vm에서도 수행 할 수 있습니다. applyBindings를이 외부로 이동할 수 있습니다. 실제로는 한 번만 실행되기를 원하기 때문입니다.

+0

감사합니다. 거의 거기에 ... Unable to parse error. "회원이 정의되지 않았습니다." – user1143632

+0

jsfiddle에 코드를 게시하면 모양을 볼 수 있습니다. –

+0

매핑에서'viewModel.model.members'가 생성됩니다. 매핑 및 뷰 모델 매개 변수로 함수를 호출하고 반환 값을 무시하여 기존 뷰 모델을 변경합니다. 당신은'viewModel.members'를 가지고 있습니다 :'ko.mapping.fromJSON (data, {}, viewModel); ' –