这看起来非常简单,但我是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时...没有任何反应。任何想法为什么会这样?
答案 0 :(得分:2)
您想要更新self.master
的内容,而不是覆盖它。因此,请将done
回调中的该行更改为:
// Map model; create pager
ko.mapping.fromJS(pagedData, self.master);
答案 1 :(得分:0)
我觉得自己很愚蠢,但这就是整个问题:
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,因此不会发生任何事情。 DRAT!