http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.form.field.ComboBox有一个beforeQuery事件。但是当我尝试这个的时候,我会收到一个抱怨,说没有查询计划。
这是如何建立起来的呢?在如何设置查询计划方面,我找不到任何文档。
{
xtype: 'combo',
flex: 2,
fieldLabel: 'other',
displayField: 'city_name',
name: 'city_name',
itemId:'city_name',
emptyText: 'plaats',
store:{
type: 'location.city'
},
beforeQuery: function( queryEvent, eOpts ){
var me = this;
var store = me.getStore();
store.proxy.extraParams={
fieldName: 'city.name',
fieldValue: me.getValue()
};
// return true;
}, ...发布于 2013-09-26 13:02:33
简而言之::
您正在重写beforeQuery 方法,而不是侦听beforeQuery 事件。侦听控制器中的beforequery事件,或向对象添加监听器,如下所示:
listeners: {
beforequery: function( queryPlan, eOpts){
var me = this,
store = me.getStore();
store.proxy.extraParams={
fieldName: 'city.name',
fieldValue: me.getValue()
};
return true; //optional only false would cancel the event see beforQuery method
}
}更长的版本:
doQuery方法如下所示:
doQuery: function(queryString, forceAll, rawQuery) {
var me = this,
// Decide if, and how we are going to query the store
queryPlan = me.beforeQuery({
query: queryString || '',
rawQuery: rawQuery,
forceAll: forceAll,
combo: me,
cancel: false
});
...some other code where the queryPlan is needed...
return true;
},您正在重写beforeQuery方法并返回任何内容(或真/假),而不是侦听事件!
这就是beforeQuery方法的样子:
beforeQuery: function(queryPlan) {
var me = this;
// Allow beforequery event to veto by returning false
if (me.fireEvent('beforequery', queryPlan) === false) {
queryPlan.cancel = true;
}
// Allow beforequery event to veto by returning setting the cancel flag
else if (!queryPlan.cancel) {
// If the minChars threshold has not been met, and we're not forcing an "all" query, cancel the query
if (queryPlan.query.length < me.minChars && !queryPlan.forceAll) {
queryPlan.cancel = true;
}
}
return queryPlan;
}如果您有意重写beforeQuery方法=>,则返回queryPlan,否则使用该事件。如您所见,使用该事件,还可以通过在beforeQuery的事件处理程序中返回false来取消查询。
https://stackoverflow.com/questions/19027865
复制相似问题