3

我有一个具有以下配置的组合框(extjs4.1.2):

  xtype:'combo',         
  store: 'MyItems',
  queryParam:'itemNumber',
  displayField:'itemNumber',
  hideTrigger:true,
  typeAhead:true,
  minChars:7,
  lastQuery: '',
  queryDelay:500  

一切都按预期工作,并且 store 在第 7 个字符上触发远程查询。但是,如果用户继续输入第 8 个字符,则会触发另一个查询。第二个查询比第一个返回更快,然后第一个查询返回并弄乱下拉。有没有办法在运行后续查询时取消第一个查询?

谢谢。

4

2 回答 2

1

您可以使用Ext.Ajax.abort()Ext.Ajax.abortAll()(ExtJS 4)。请参阅 API 文档:http ://docs.sencha.com/ext-js/4-1/#!/api/Ext.Ajax

您可以通过拦截onTypeAhead组合框的功能来使用它:

comboObj.onTypeAhead = Ext.Function.createInterceptor(comboObj.onTypeAhead, function() {
    Ext.Ajax.abort(); //aborts the last Ajax request
    return true; //runs the onTypeAhead function
});

或者您可以使用该autoAbort属性,Ext.data.Connection但没有太多关于此的文档。我将尝试为您提供一个可行的示例。

于 2012-11-20T03:58:26.510 回答
0

这是我结束做的事情:

listeners:{
  beforequery:function(queryEvent){
    Ext.Ajax.abortAll(); //cancel any previous requests
    return true;
  }
}
于 2012-12-01T00:36:26.293 回答