3

knockoutjs-2.1.0 を使用してページネーションを作成しようとしていますが、次のエラーが発生します。

キャッチされていない TypeError: オブジェクト関数 h(){if(0return i||e(),aULa(h),k} にはメソッド 'slice' がありません

問題を次のように絞り込みました。どうやらノックアウトは、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/

この問題について何かアドバイスがあれば、本当に感謝しています。

4

1 に答える 1

4

Knockoutの一般的なエラー:this.contactsToShow例では関数になり、関数として呼び出す必要があります:

return this.contactsToShow().slice(startIndex, startIndex + this.pageSize());
于 2012-09-24T12:55:36.623 に答える