【发布时间】:2016-09-30 02:55:59
【问题描述】:
所以我没有选择使用可以让我的生活变得如此轻松的外部第三方库,所以我必须从头开始构建它。
我认为我把这件事复杂化了。
所以我们的想法是,如果客户端通过 url 传入,例如:showPages=4。然后我们有类似的东西:
<< < 1 2 3 4 _5_ 6 7 8 9 > >>
其中 5 是当前页面,您应该看到当前页面左侧 4 和右侧 4(假设最大页面数为 20)
到目前为止,我的视图模型如下所示:
var ViewModel = {
self.pagesBefore = ko.observable(4);
self.pagesAfter = ko.observable(4);
self.currentPage = ko.observable(5);
self.totalPages = ko.observable(20);
self.pageStart = ko.observable(0);
self.pageEnd = ko.observable(0);
}
我认为我过于复杂了,因为我认为我不需要之前的页面和之后的页面,我想我可以将其更改为:self.showPages(4)
我遇到的问题是将它放在视图中,我没有问题确定从哪里开始,因此例如视图模型中可能有一个方法:
var endPage = self.currentPage() + self.pagesAfter();
if (endPage <= self.totalPages()) {
self.pageEnd(endPage); // In our example above its 9
} else {
self.pageEnd(self.totalPages());
}
将“最终”页面移到右侧,在本例中为 9。
另一个计算“起始页面(或当前页面之前的页面)”是什么:
var startPage = self.currentPage() - self.pagesBefore();
if (startPage > 1) {
self.pageStart(startPage); // In our example above its 1
} else {
self.pageEnd(1);
}
所以我最终会得到一个看起来像这样的视图模型变量:
var ViewModel = {
self.pagesBefore = ko.observable(4);
self.pagesAfter = ko.observable(4);
self.currentPage = ko.observable(5);
self.totalPages = ko.observable(20);
self.pageStart = ko.observable(1);
self.pageEnd = ko.observable(9);
}
所以我的问题是:如何将其转换为视图,以便我有一个分页元素,其中选择了 5 个,右侧有 4 个,左侧有 4 个,总共 20 页? >
【问题讨论】:
标签: javascript knockout.js pagination