javascript - 使用 Knockout.JS 构建分页控件

标签 javascript knockout.js

我继承了一个使用 Knockout.JS 呈现帖子列表的项目。客户要求对该列表进行分页,我想知道使用 Knockout.JS 是否可能且合适。我可以用纯 JavaScript 轻松实现这一点,但我想使用 Knockout(如果合适)来保持一致性。

据我所知,该页面在页面的 HTML 中使用了 native 模板。有一个 ViweModel 将帖子存储在 ko.ObservableArray() 和帖子模型中。

数据通过 jQuery ajax 调用加载,其中返回的 JSON 映射到后模型对象,然后传递到负责数据绑定(bind)的 ObservableArray。

是否可以修改 ViewModel 以绑定(bind)分页链接(需要时包括“上一个”和“下一个”链接),或者我最好用纯 JS 编写它?

最佳答案

在 knockout 中构建一个计算的可观察值应该很容易,它显示完整页面列表的“窗口”。例如添加到 View 模型:

this.pageIndex = ko.observable(1);
this.pagedList = ko.computed(function() {
   var startIndex = (this.pageIndex()-1) * PAGE_SIZE;
   var endIndex = startIndex + PAGE_SIZE;
   return this.fullList().slice(startIndex, endIndex);
}, this);

然后将显示记录的“foreach”绑定(bind)绑定(bind)到pagedList而不是完整列表,并且在前向和反向链接中,只需更改pageIndex的值。从那里开始,您应该能够使其更加强大/提供更多功能。

此外,这假设您无论如何都将所有数据预加载到客户端。还可以对上一个和下一个链接进行 JSON 调用,并使用返回的项目更新模型。 “下一个”函数(要添加到 View 模型原型(prototype)中)可能如下所示:

ViewModel.prototype.next = function() {
   var self = this;
   this.pageIndex(this.pageIndex()+1);
   $.ajax("dataurl/page/" + this.pageIndex(), {
       success: function(data) {
          self.dataList(data);
       }
   });
}

(为简洁起见,使用 jQuery 语法进行 ajax 调用,但任何方法都可以)

关于javascript - 使用 Knockout.JS 构建分页控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16100068/

相关文章:

javascript - 将 knockout.simpleGrid.3.0.js 与 Require.js 结合使用

javascript - 如何使用复选框从 knockout.js 中的另一个数组中过滤嵌套的 ko.observableArray

javascript - 将超长数组传递给 gl.uniform3fv

javascript - Safari 链接悬停问题

javascript - 使用 MouseEvent 更改图像时如何避免闪烁?

javascript - 动态更改 DIV 元素的类名称

knockout.js - 根据条件验证observableArray

javascript - knockout js : Lazy load options for select

javascript - 将数字强制为 2 位以进行计算

javascript - 如何设置jsfiddle的javascript版本?