KnockoutJS - 不能对ko.computed对象使用“Slice”

时间:2012-09-24 12:50:12

标签: javascript jquery pagination knockout.js

我正在尝试使用knockoutjs-2.1.0创建分页,我收到以下错误:

  

未捕获TypeError:对象函数h(){if(0return i || e(),a.U.La(h),k}没有方法'slice'

我已经将问题缩小到这个:显然,淘汰不喜欢在使用ko.computed创建的对象上调用“slice”方法。我的计算类型是:

this.contactsToShow = ko.computed(function() {
// Represents a filtered list of contacts
// i.e., only those matching the "typeToShow" condition
var desiredType = this.typeToShow();
if (desiredType == "all") {
return this.allContacts();
}
return ko.utils.arrayFilter(this.allContacts(), function(aContact) {
return aContact.contactType == desiredType;
});
}, this);

当我设置“showCurrentPage”属性时,它会抛出一个错误,在这里:

contactListView.showCurrentPage = ko.dependentObservable(function() {
if (this.currentPage() > this.totalPages()) {
    this.currentPage(this.totalPages() - 1);
}
var startIndex = this.pageSize() * this.currentPage();
return this.contactsToShow.slice(startIndex, startIndex + this.pageSize());
}, contactListView);

但是,如果我在设置showCurrentPage(allContacts数组)时使用原始的observableArray,它可以工作。

你可以在这里找到jsfiddle:http://jsfiddle.net/mzalen/S74rJ/12/

我真的很感激有关这个问题的任何建议,因为这让我很生气。

1 个答案:

答案 0 :(得分:4)

Knockout的常见错误:this.contactsToShow成为您示例中的函数,您必须将其作为函数调用:

return this.contactsToShow().slice(startIndex, startIndex + this.pageSize());