問題の概要は次のとおりです。列の sortChange() リスナーをセットアップしました。このリスナーは、並べ替えの変更に応答してクエリを起動し、新しく並べ替えられたデータをフェッチします。フェッチ前にグリッドの状態を保存し、フェッチ後にグリッドの状態を復元します。問題は、gridState の復元メカニズムが元の並べ替えリスナーをトリガーし、プロセス全体が何度も何度も何度も繰り返されることです。
scope.sitesGrid.onRegisterApi = function(gridApi) {
scope.gridApi = gridApi;
scope.gridApi.core.on.sortChanged(scope, function () {
// load new sites on a sort change
scope.initialize();
});
};
scope.initialize = function() {
// save current grid state
scope.gridApi && (scope.gridState = scope.gridApi.saveState.save());
fetchSites().then(function (sites) {
scope.sitesGrid.data = sites
// restore current grid state, but inadvertently retrigger the 'sortChanged' listener
scope.gridApi.saveState.restore(scope,scope.gridState);
})
};
sortChange リスナーを使用する代わりに、各列ヘッダーにクリック リスナーを設定できると考えていましたが、この解決策は見苦しく、すべてのヘッダー セル テンプレートに移動して変更を加える必要があります。