【发布时间】:2017-08-30 02:40:31
【问题描述】:
我正在为当前和未来的项目构建一个组件,用于处理淘汰组件级别的分页。我的想法是基于here 接受的答案。另请参考 Knockout 组件页面here。
到目前为止,这是我的组件。我无法让任何数据实际显示,更不用说动态表格标题了。
ko.components.register("jPage", {
viewModel: function (params) {
var self = this;
self.Items = params.Items;
self.Keys = Object.keys(self.Items);
self.PerPage = params.PerPage;
self.Page = 1;
self.PagesTotal = Math.ceil(self.Items.length / self.PerPage);
self.ItemsVisible = ko.computed(function () {
first = (self.Page * self.PerPage) - self.PerPage;
return self.Items.slice(first, first + self.PerPage);
})
self.ChangePage = function (_page) {
if (_page < 1 || _page > self.PagesTotal) return;
this.Page(_page);
}.bind(this);
},
template:
'<div data-bind="foreach: ItemsVisible"> \
Display Table headers and data here <br>\
<span data-bind="text: $data[0]"> </span>\
</div>\
<nav aria-label="Page navigation">\
<ul class="pagination">\
<li data-bind="css:{disabled: Page <= 1} ">\
<a aria-label="Previous" data-bind="click: ChangePage( Page - 1 )">\
<span aria-hidden="true">«</span>\
</a>\
</li>\
<li><a data-bind="text: Page -2, click: ChangePage( Page - 2 ), visible: Page > 2 "> </a></li>\
<li><a data-bind="text: Page -1, click: ChangePage( Page - 1 ), visible: Page > 1 "> </a></li>\
<li class="active"><a data-bind="text: Page"> </a></li>\
<li><a data-bind="text: Page +1, click: ChangePage( Page + 1 ), visible: (PagesTotal > Page +0) "></a></li>\
<li><a data-bind="text: Page +2, click: ChangePage( Page + 2 ), visible: (PagesTotal > Page +1)"></a></li>\
<li data-bind="css: {disabled: (PagesTotal < Page )}">\
<a aria-label="Next" data-bind="click: ChangePage( Page + 1 )">\
<span aria-hidden="true">»</span>\
</a>\
</li>\
</ul>\
</nav>\
'
})
这是组件的调用方式:
<div data-bind="component: { name: 'jPage', params: { Items: CustomerList(), PerPage: 25} }">
CustomerList 看起来像:
[
{FirstName: "John", Email: "John@example.com"},
{FirstName: "Steve", Email: "Steve@example.com"},
{FirstName: "Jim", Email: "Jim@example.com"}
]
我缺少哪些变量或上下文来访问 Items 键/值?
附加说明。 我没有任何必需的数据形式,因为我可以毫无后果地操纵它。
【问题讨论】:
-
首先为了对变化做出反应,属性必须是可观察的。因此,您的 Page 属性不会像现在这样发挥作用。一旦你解决了这个问题,然后是所有使用它的参考资料,你的很多问题都会消失。 knockoutjs.com/documentation/observables.html
标签: javascript knockout.js pagination