我有一个带有以下配置的组合框(extjs4.1.2):
xtype:'combo',
store: 'MyItems',
queryParam:'itemNumber',
displayField:'itemNumber',
hideTrigger:true,
typeAhead:true,
minChars:7,
lastQuery: '',
queryDelay:500
一切都按预期工作,并且存储在第7个字符处触发远程查询。但是,如果用户继续键入第8个字符,则会触发另一个查询。第二个查询返回的速度比第一个快,然后第一个查询返回并混淆下拉。有没有办法在后续查询运行时取消第一个查询?
感谢。
答案 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;
}
}