Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
extjs 4.2如何创建queryplan_Extjs_Extjs4 - Fatal编程技术网

extjs 4.2如何创建queryplan

extjs 4.2如何创建queryplan,extjs,extjs4,Extjs,Extjs4,具有beforeQuery事件。但当我试着这样做时,我得到了一个抱怨,那就是没有查询计划 { xtype: 'combo', flex: 2, fieldLabel: 'other',

具有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;
                                    }, ...
这是如何确定的?我在任何地方都找不到关于如何设置查询计划的文档

                                {
                                    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来取消查询