我有一个搜索页面,其结果呈现在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