javascript - KnockoutJS - 不能将 "Slice"与 ko.computed 对象一起使用

标签 javascript jquery pagination knockout.js

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

Uncaught TypeError: Object function h(){if(0return i||e(),a.U.La(h),k} has no method 'slice'

我已将问题缩小为:显然 knockout 不喜欢在使用 ko.computed 创建的对象上调用“切片”方法。我的计算类型是这样的:

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/

我真的很感激任何关于这个问题的建议,因为它让我发疯。

最佳答案

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

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

关于javascript - KnockoutJS - 不能将 "Slice"与 ko.computed 对象一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12565373/

相关文章:

javascript - 用画架保存旋转图像?

javascript - 使用 jQuery .click() (或类似的)在 href 属性中触发 javascript

pagination - 对 Laravel 5.2 中的有限记录使用分页

IE 中的 jQuery slideToggle 和 div

javascript - 如何访问功能键以将焦点添加到控件?

arrays - MongoDb 中的桶模式是处理大型无界数组的最佳方式吗?

php - Codeigniter 分页显示结果数和页数

javascript - 如何使用 AngularJS 检测浏览器中的 cookie 是否被禁用

javascript - 谷歌地图 JS v3 : detect load failures

javascript - 如何找到与另一个值异或的值?