我遇到了将新DOM元素绑定到viewmodel的麻烦。这些元素在使用AJAX调用加载的局部视图中(请参阅下面的customizeQuote函数)。
$(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:第一个参数应该是你的视图模型;第二个参数应该是一个DOM节点”
我是淘汰赛的新手,我不知道我做错了什么。有什么想法吗?
答案 0 :(得分:7)
$("#covers")
不是DOM节点,它是一个jQuery对象。也许尝试使用它:
ko.applyBindings(self.selectedQuote, $("#covers")[0]);
[0]
将获取jquery对象中选择器的第一个匹配元素。