另一个淘汰赛问题。
我有一个需要服务器分页的页面。我想用淘汰赛来实现这一点。
我使用映射插件创建了一个viewmodel并添加了许多功能。
var jsonModel = '@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(this.Model, new Newtonsoft.Json.Converters.IsoDateTimeConverter()))';
myViewModel = ko.mapping.fromJSON(jsonModel, {}, new ViewModel());
ko.applyBindings(myViewModel);
我最初实现了一个计算的observable。但这会产生错误,因为'requestData'未初始化。因此更新的变体带有'if(typeof self.requestData!='undefined')'
function ViewModel() {
var self = this;
//---- Return PageNumbers
self.Paging = ko.computed(function () {
if (typeof self.requestData != 'undefined') {
if (self.requestData.settings.pageNumber() <= 5) {
return ko.utils.range(1, 11);
}
if (self.requestData.settings.pageNumber() + 5 > self.requestData.settings.nbrOfPages()) {
return ko.utils.range(self.requestData.settings.nbrOfPages() - 11, self.requestData.settings.nbrOfPages());
}
return ko.utils.range(self.requestData.settings.pageNumber() - 5, self.requestData.settings.pageNumber() + 5);
};
return ko.utils.range(1, 11);
});
当我调用ajaxrequest时,应该更新数组:
self.changePage = function(pageNumber) {
self.Paging = ko.utils.range(pageNumber -1 > 0 ?)
myViewModel.requestData.settings.pageNumber = pageNumber;
$.ajax({
type: "post",
contentType: "application/json",
url: "../Refund/FilterPageSortingChange",
data: ko.toJSON(self.requestData),
error: function (xhr, status, error) {
baseShowError("Server Error", "Error changing page");
},
success: function (response) {
var receivedResponse = JSON.parse(response);
if (receivedResponse.Success) {
ko.mapping.fromJS(receivedResponse.Result, {}, self);
} else {
baseShowError("Page not found", receivedResponse.message);
}
}
});
};
在接收新数据时如何更新分页数组?
种类问候
更新:除了我的代码之外,最好/最简单的选项是创建一个可以忽略pageNumber的可观察数组吗?
答案 0 :(得分:1)
您的pageNumber是一个可观察的,但是当你这样分配它时:
myViewModel.requestData.settings.pageNumber = pageNumber;
你已经删除了observable并用一个简单的值替换它。你应该像这样分配:
myViewModel.requestData.settings.pageNumber(pageNumber);