ノックアウトとコグリッドで問題が発生しています。いくつかのテストの後、私はこのフィドルでそれを再現することができました:
要するに、サーバー実装のフィルタリングとページングを使用して、kogrid にデータを提供するサンプル VM ( ItemsViewModel ) があります。vm は、 kogridが必要とするすべてのデータを含むgridOptionsオブジェクトと、サーバーからデータを取得するために呼び出される更新関数を公開します。フィドルでは、実際のデータを取得する ajax 呼び出しをダミーのインライン データに置き換えました。
さて、ページをロードすると、kogrid ソースで常にこのエラーが発生します。
エラー: TypeError: self.sortedData は関数ではありません ソース ファイル: http://ericmbarnard.github.com/KoGrid/lib/KoGrid.debug.js行: 1473
代わりに、基本的な kogrid サンプル ( https://github.com/Knockout-Contrib/KoGrid )のように、dummyData という名前の監視可能な配列をグリッドの div だけで使用すると、このエラーは発生しません。ライブラリの使用方法に問題があると思います。
私のVMの関連部分は次のとおりです。
function ItemsViewModel() {
var self = this;
self.dummyArray = ko.observableArray([{
name: "Goofy",
age: 27
}, {
name: "Mickey",
age: 33
}]);
self.items = ko.observableArray([]);
self.filterOptions = {
filterText: ko.observable(""),
useExternalFilter: true
};
self.pagingOptions = {
pageSizes: ko.observableArray([5, 10]),
pageSize: ko.observable(20),
totalServerItems: ko.observable(0),
currentPage: ko.observable(1)
};
self.gridOptions = {
data: self.items,
enablePaging: true,
multiSelect: false,
filterOptions: self.filterOptions,
pagingOptions: self.pagingOptions,
columnDefs: [{
field: "id",
displayName: "ID"
}, {
field: "title",
displayName: "Title"
}]
};
self.refresh();
}
この関数は、データを取得するために使用されます (現在、私はフィルタリングを省略しました):
ItemsViewModel.prototype.refresh = function () {
var params = {
page: this.pagingOptions.currentPage(),
pageSize: this.pagingOptions.pageSize(),
sortBy: "datemodified",
isSortDesc: true
};
// dummy data (2 pages x 5)
var data = {
page: 1,
totalPages: 2,
totalRecords: 10,
records: []
};
for (var i = 0; i < 10; i++) {
data.records.push({
id: i,
title: "title " + i
});
}
ko.utils.arrayPushAll(this.items, data.records);
this.pagingOptions.totalServerItems(data.totalRecords);
}
私のHTMLは、データバインドが設定された単なるdivです
koGrid: { data: gridOptions }