2013-01-04 2 views
1

나는 넉 아웃을 배우므로 Knockout.mapping.fromJS를 사용할 수 없습니다. 여기 내 코드는 다음과 같습니다.넉 아웃 매핑 : 오브젝트가 채워지지 않음

$.getJSON("data/status.json", function(data) { 
     var members = ko.mapping.fromJS(data); 
}); 
ko.applyBindings(members); 

저는 템플릿을 사용하고 있습니다. 여기 템플릿입니다 :

<script type="text/html" id="membersTemplate"> 
    <li data-bind="text: members.dname"></li> 
</script> 

그리고 마크 업 ... 제대로

<div id="members"> 
<h2>Members</h2> 
<ul data-bind="template: {name: 'membersTemplate', foreach: members}"></ul> 
</div> 

JSON 데이터로드,하지만 "회원"개체는 "정의되지 않은." (Members.dname은 여러 객체 중 하나의 객체 속성입니다.)

누구든지 내가 뭘 잘못하고 있다고 말할 수 있습니까? 미리 감사드립니다!

답변

0

members 변수가 범위를 벗어 났으므로 AJAX 호출이 완료되면이 사라집니다. 너는 이것 같이 무언가를 원한다.

$.ajax({url:"/echo/json/", data:json, type:"POST", success:function(data) { 
    var viewModel = ko.mapping.fromJS(data); 
    ko.applyBindings(viewModel) 
}}); 

따라서 AJAX 호출 범위 또는 이와 비슷한 바인딩을 적용하십시오.

var self = this 
self.members = ko.observableArray([]); 
$.ajax({url:"/echo/json/", data:json, type:"POST", success:function(data) { 
    var members = ko.mapping.fromJS(data); 
    self.members(members); 
}}); 
// do the binding elsewhere 

이는 응답 내에서 클로저를 묶습니다. AJAX 호출은 약속 패턴이므로 응답이 언제 완료되는지 실제로 알 수 없습니다. 다음은 작동 예제가있는 code입니다.

+0

멋진! 이것으로 해결됩니다. 매우 감사합니다! – user1947287