2013-03-11 1 views
3

새로운 DOM 요소를 내 viewmodel에 바인딩하는 데 문제가 있습니다. 이 요소는 AJAX 호출을 사용하여로드 된 부분 뷰에 있습니다 (아래의 customizeQuote 함수 참조).AJAX 호출 후 새로운 DOM 요소를 viewmodel에 바인딩

$(function() { 
var mvcModel = ko.mapping.fromJS(initialData); 

function QuoteViewModel() { 
    var self = this; 

    self.customizeQuote = function (quote) { 
     self.selectedQuote = quote; 

     //remove the disable attribute on all form controls before serializing data 
     $(".step").each(function() { 
      $(this).find('input, select').removeAttr('disabled'); 
     }); 

     //convert form data to an object 
     var formData = $('#etape').toObject(); 

     $.ajax("getSelectedQuote", { 
      data: ko.toJSON({ model: self.selectedQuote, model1: formData }), 

      type: "post", contentType: "application/json", 
      success: function (result) { 

       $("#custom").html(result); 
       $("#etape").formwizard("show", "customize"); 
       ko.applyBindings(self.selectedQuote, $("#covers")); 

      } 
     }); 
    } 
} 

var myViewModel = new QuoteViewModel(); 
var g = ko.mapping.fromJS(myViewModel, mvcModel);  
ko.applyBindings(g); 
}); 

다음은 부분보기 HTML입니다 :

@model QuoteViewModel 
<table id="covers"> 
<thead> 
    <tr> 
     <th> 
      ProductName 
     </th>    
    </tr> 
</thead> 
<tbody data-bind="foreach: CoverQuotesViewModel"> 
    <tr> 
     <td> 
      <input data-bind="value: ProductName" /> 
     </td>   
    </tr> 
</tbody> 
</table> 

라인 :

"ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node"

내가 녹아웃 상당히 새로운 그리고 난 :

ko.applyBindings(self.selectedQuote, $("#covers")); 

오류를 트리거 내가 뭘 잘못하고 있는지 보지 마. 어떤 생각?

답변

7

$("#covers")은 DOM 노드가 아니지만 jQuery 객체입니다. 아마도 대신 사용해보십시오 :

ko.applyBindings(self.selectedQuote, $("#covers")[0]); 

[0]는 jQuery 오브젝트의 선택의 첫 번째 일치하는 요소를 얻을 것이다.

+0

바로 당신입니다! 이것을 지적 해 주셔서 감사합니다, 지금 작동 중입니다. – Sam

관련 문제