如何正确取消商店过滤请求

时间:2012-11-19 23:37:31

标签: extjs combobox extjs4

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

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

一切都按预期工作,并且存储在第7个字符处触发远程查询。但是,如果用户继续键入第8个字符,则会触发另一个查询。第二个查询返回的速度比第一个快,然后第一个查询返回并混淆下拉。有没有办法在后续查询运行时取消第一个查询?

感谢。

2 个答案:

答案 0 :(得分: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属性,但没有太多关于此的文档。我会尝试为你做一个有效的例子。

答案 1 :(得分:0)

以下是我的结论:

listeners:{
  beforequery:function(queryEvent){
    Ext.Ajax.abortAll(); //cancel any previous requests
    return true;
  }
}