2013-03-11 98 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(self.selectedQuote, $("#covers")); 

触发一个错误:

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

我是相当新的淘汰赛,我看不到我做错了什么。任何想法 ?

回答

7

$("#covers")虽然不是DOM节点,但它是一个jQuery对象。也许尝试用这个代替:

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

[0]将得到jQuery对象中选择的第一个匹配元素。

+0

对!感谢您指出这一点,它现在正在工作。 – Sam 2013-03-11 09:24:53