SlickGrid の非同期レンダリングを中止する方法はありますか?
-
26-09-2019 - |
質問
結果が SlickGrid でレンダリングされる検索ページがあります。実行するajax検索です onkeyup
, そのため、Slick.Grid インスタンスの検索を実行できるようになります。 render
呼び出され、最初の非同期の前に別の結果が返されます。 render
完了します。初回をキャンセルしたいのですが render
2 番目の ajax リクエストが返されたらすぐに、2 つが存在しないようにします render
同時に通話が行われます。
例を使用して編集する:
これが私がやっていることです。 alert
実行順序を追跡するために用意されています。
function setupGrid() {
slickDataView = new Slick.Data.DataView();
slickGrid = new Slick.Grid(slickGridDiv, slickDataView.rows, slickGridColumns, slickGridOptions);
slickDataView.onRowsChanged.subscribe(function(rows) {
slickGrid.removeRows(rows);
slickGrid.updateRowCount();
slickGrid.render();
});
slickDataView.onRowCountChanged.subscribe(function(args) {
slickGrid.updateRowCount();
slickGrid.render();
});
}
function performSearch() {
jQuery.get('searchPage.php', {MODEL_ID: userInputField.val()},
function(results) {
slickDataView.beginUpdate();
alert(1);
slickDataView.setItems(results);
alert(2);
slickDataView.endUpdate();
}
);
}
setupGrid();
userInputField.keyup(function() { performSearch(); });
に 2 つの数字を入力すると、この順序で次のアラートが表示されます。 userInputField
テキストフィールドを立て続けに:
1
1
2
解決
あなたのページに起こって何か他のものが存在する必要があります。 あなたが記載されている例は不可能です - JavaScriptの実行が解雇イベントによって中断されることはありません。イベントは、ちょうどキューに入れられ、現在のコードの実行が行われた後、イベントループによってピックアップされます。あなたはあなたの例では見るもの、1212です。
あなたはAJAXの応答が故障して戻って来るかもしれないし、古い検索結果が新しいものを上書きすることができますので、AJAX呼び出しを絞ると、以前の呼び出しからのコールバックをキャンセルしたいと思うでしょう。
所属していません StackOverflow