首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Extjs4.2如何创建查询计划

Extjs4.2如何创建查询计划
EN

Stack Overflow用户
提问于 2013-09-26 12:09:13
回答 1查看 1.3K关注 0票数 0

http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.form.field.ComboBox有一个beforeQuery事件。但是当我尝试这个的时候,我会收到一个抱怨,说没有查询计划。

这是如何建立起来的呢?在如何设置查询计划方面,我找不到任何文档。

代码语言:javascript
复制
                                {
                                    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;
                                    }, ...
EN

回答 1

Stack Overflow用户

发布于 2013-09-26 13:02:33

简而言之:

您正在重写beforeQuery 方法,而不是侦听beforeQuery 事件。侦听控制器中的beforequery事件,或向对象添加监听器,如下所示:

代码语言:javascript
复制
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方法如下所示:

代码语言:javascript
复制
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方法的样子:

代码语言:javascript
复制
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来取消查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19027865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档