我有一个使用KnockoutJs(版本2.3.0)的ASP.NET MVC 4视图 . 该页面加载得很好,任何具有 data-bind 属性的 Existing 元素与KnockoutJs一样正常工作 . 问题是,如果我将包含 data-bind 的页面添加到已绑定的ViewModel中已包含的observable的页面,即使它具有正确的data-bind属性,它似乎也没有订阅 . 通过Ajax添加的HTML是MVC PartialView .
HTML (Starting)
KO ViewModel
var ViewModel = function() {
var self = this;
self.FullName = ko.observable('Bob');
self.Units = ko.observable(@Model.Units);
self.Price = ko.observable(@Model.Price);
self.SomeValue = ko.observable();
self.CalculatedCost = ko.computed(function() {
return self.Units * self.Price;
};
};
ko.applyBindings(new ViewModel());
AJAX (within a .js file)
APP.GetPartialView = function () {
var _formValues = $("form#MyForm").serializeArray();
var _url = $Url.resolve("~/Shared/_PartialViewName/?" + $.param(_formValues));
function _success(html) {
$("#AdditionalData").html(html);
};
$.ajax({
url: _url,
data: _formValues,
cache: false,
dataType: "html",
success: _success
});
};
MVC Controller: PartialViewResult
[HttpGet]
public virtual PartialViewResult _PartialViewName(AccountViewModel model)
{
return PartialView(model);
}
MVC PartialView HTML
@model APP.AccountViewModel
@Html.Hidden("SomeValue", new { data_bind="value: SomeValue" })
@Html.LabelFor(m => m.FullName)
@Html.LabelFor(m => m.CalculatedCost)
HTML (After Ajax Call)
新添加的html将不会收到FullName的文本,计算成本的ko计算字段也不会写入同名observable的值 .
所以,问题是如何告诉Knockout这些元素只是“迟到了”,但是已经绑定了ViewModel observable的正确数据绑定凭据?
Updated: 我已更新上述代码参考资料 .