我有一個搜索頁面,其結果呈現在SlickGrid中。這是一個執行onkeyup
的ajax搜索,所以可以執行搜索,調用Slick.Grid實例的render
,並在第一個異步render
完成之前返回另一個結果。一旦第二個Ajax請求返回,我想取消初始的render
,這樣就不會有兩個render
調用同時發生。有沒有辦法中止一個SlickGrid異步渲染?
與實例編輯:
這裏有我在的地方,跟蹤執行順序做什麼,與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(); });
我得到此序列中的以下警報,當我快速連續輸入兩個數字到userInputField
文本字段:
1
1
2
您可以詳細說明如何讓這種行爲發生? 1)瀏覽器JS執行是單線程的,所以沒有任何事情可以在字面上同時發生。 2)對於grid.render()的API級調用幾乎在所有情況下都會導致對renderRows()的同步調用,因爲在釋放鍵盤鍵時滾動位置沒有改變。 – Tin 2010-08-05 06:14:10