extjs 4.2如何创建queryplan
具有beforeQuery事件。但当我试着这样做时,我得到了一个抱怨,那就是没有查询计划extjs 4.2如何创建queryplan,extjs,extjs4,Extjs,Extjs4,具有beforeQuery事件。但当我试着这样做时,我得到了一个抱怨,那就是没有查询计划 { xtype: 'combo', flex: 2, fieldLabel: 'other',
{
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;
}, ...
这是如何确定的?我在任何地方都找不到关于如何设置查询计划的文档
{
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;
}, ...
简而言之: 您正在覆盖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: 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;
},
较长的版本:
doQuery
方法如下所示:
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: 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方法并不返回任何内容(或true/false),而不是侦听事件
这是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){
var me=这个;
//通过返回false允许beforequery事件否决
if(me.firevent('beforequery',queryPlan)==false){
queryPlan.cancel=true;
}
//通过返回设置取消标志,允许beforequery事件否决
否则如果(!queryPlan.cancel){
//如果未达到minChars阈值,并且我们没有强制执行“全部”查询,请取消该查询
if(queryPlan.query.length
如果您有意重写beforeQuery方法=>返回queryPlan,否则请使用事件。如您所见,使用事件还可以通过在beforeQuery的事件处理程序中返回false来取消查询