代码之家  ›  专栏  ›  技术社区  ›  aw crud

是否有方法中止slickgrid异步呈现?

  •  0
  • aw crud  · 技术社区  · 15 年前

    我有一个搜索页面,它的结果以slickgrid呈现。它是执行的Ajax搜索 onkeyup ,因此可以执行搜索,slick.grid实例 render 被调用,并在第一个异步之前返回另一个结果 提供 完成。我想取消首字母 提供 一旦第二个Ajax请求返回,这样就不会有两个 提供 呼叫同时发生。

    用示例编辑 :

    这就是我要做的 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 回复  |  直到 15 年前
        1
  •  1
  •   Tin    15 年前

    你的页面上一定还有别的东西。 您列出的示例是不可能的-javascript执行不会被触发的事件中断。在当前代码执行完毕后,事件将被排队并由事件循环接收。您将在示例中看到的是1212。

    您将希望限制Ajax调用,并取消以前调用的回调,因为Ajax响应可能会出现问题,旧的搜索结果可能会覆盖新的回调。