在阅读了新淘汰赛 3.2 中的自定义元素后,我尝试制作一些有用的东西,而不是真正直接使用它。
我试图制作一个分页元素,它将有一个当前元素,并允许用户从 currentpage - 2 到 currentpage + 2 选择页面。
问题是与 KO 示例相比,我的模板依赖于 observables。所以我试图通过创建 pureComputed 并在其中生成模板来克服它。但这不允许我在单击元素时添加回调。
ko.components.register('pagination', {
viewModel: function(params) {
var self = this;
this.page = ko.observable(5);
this.maxPage = ko.observable(6);
this.callback = function(i){
console.log(i);
}
this.template = ko.pureComputed(function() {
var page = self.page(),
minTmp = page - 2,
min = minTmp < 1 ? 1 : minTmp,
maxTmp = page + 2,
max = maxTmp > self.maxPage() ? self.maxPage() : maxTmp,
i, html = '';
for (i = min; i <= max; i++){
html += (i === page) ? '<li class="active"><a>'+i+'</a>':
'<li data-bind="click: function(i){ callback(i) }"><a>'+i+'</a>';
}
return '<li><a href="#">«</a></li>'+ html +'<li><a href="#">»</a></li>';
});
},
template: '<ul class="pagination pagination-sm" data-bind="html: template"></ul>'
});
这是jsFiddle。在实际代码中this.page
,this.maxPage
将从参数中获取。我不知道如何才能使所有这些工作。