[英]ASP.net MVC/Knockout JS Mapping - Can't update ViewModel
这似乎很简单,但是我是Knockout JS的新手。 在完成大量教程之后,我提出了以下建议:
// Create view model
var viewModel = function () {
var self = this;
self.master = ko.mapping.fromJS(@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model)));
self.total_results = ko.observable(self.master.totalRecordCount());
self.pager = ko.pager(self.total_results);
self.pager().CurrentPage.subscribe(function () {
self.search();
})
self.search = function () {
$.ajax({
type: "GET",
url: "/api/get?data=1&start_index=" + self.pager().FirstItemIndex() + "&end_index=" + self.pager().LastItemIndex() + "",
}).done(function (pagedData) {
// Map model; create pager
ko.mapping.fromJS(pagedData, self.master);
//self.total_results(self.master.totalRecordCount());
}).error(function (ex) {
alert("Error");
});
}
}
$(function () {
// Apply
ko.applyBindings(viewModel);
});
当我单击分页按钮时,搜索方法将运行并获取新数据。 当我更新ViewModel时...什么都没发生。 任何想法为什么会这样?
您想要更新self.master
的内容,而不是覆盖它。 因此,将done
回调中的该行更改为:
// Map model; create pager
ko.mapping.fromJS(pagedData, self.master);
我真的很傻,但这就是整个问题:
var viewModel = function () {
var self = this;
self.master = ko.mapping.fromJS(@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model)));
self.pager = ko.pager(ko.observable(self.master.totalRecordCount()));
self.pager().CurrentPage.subscribe(function () {
self.search();
});
self.search = function () {
$.ajax({
type: "GET",
url: "/api/get?data=1&start_index=" + self.pager().FirstItemIndex() + "&end_index=" + self.pager().LastItemIndex() + "",
success: function (obj) {
ko.mapping.fromJS(obj, self.master);
}
});
}
}
$(document).ready(function () {
ko.applyBindings(new viewModel());
});
由于我在应用绑定时没有抓住“新的” viewModel,因此不会发生任何事情。 德拉特!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.