【发布时间】:2010-08-05 04:28:44
【问题描述】:
我有一个搜索页面,其结果在 SlickGrid 中呈现。这是一个执行onkeyup 的ajax 搜索,因此可以执行搜索,调用Slick.Grid 实例的render,并在第一个异步render 完成之前返回另一个结果。我想在第二个 ajax 请求返回后立即取消最初的 render,这样就不会同时发生两个 render 调用。
用示例编辑:
这就是我正在做的事情,使用alerts 来跟踪执行顺序。
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() 的同步调用,因为在您释放键盘键时滚动位置没有改变。
标签: javascript jquery slickgrid