0

結果が SlickGrid にレンダリングされる検索ページがあります。を実行するのは ajax 検索でonkeyupあるため、検索が実行され、Slick.Grid インスタンスrenderが呼び出され、最初の非同期renderが完了する前に別の結果が返される可能性があります。同時に 2 つの呼び出しが行われrenderないように、2 番目の ajax 要求が戻ってきたらすぐにイニシャルをキャンセルしたいと思います。render

例で編集

alert実行順序を追跡するために s を配置して、私がやっていることは次のとおりです。

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テキスト フィールドに2 つの数字を立て続けに入力すると、次のようなアラートが順番に表示されます。

1
1
2
4

1 に答える 1

1

あなたのページで何か他のことが起こっているに違いありません。あなたがリストした例は不可能です.JavaScriptの実行は、発生したイベントによって中断されることはありません. 現在のコードの実行が完了した後、イベントはキューに入れられ、イベント ループによって取得されます。あなたの例では、1212 が表示されます。

AJAX 呼び出しを抑制し、以前の呼び出しからのコールバックをキャンセルすることもできます。これは、AJAX 応答が順不同で返され、古い検索結果が新しい検索結果を上書きする可能性があるためです。

于 2010-08-05T15:45:48.480 に答える