日期:2014-05-16  浏览次数:20458 次

extjs4下拉框(ComboBox)无法正确分页解决方案
extjs4改动很大,bug也很多!
一直在踩雷的过程中……
本人目前版本为4.0.2a
问题:
下拉框的分页不能正确翻页,如下为出问题的代码:
{
                            name: 'submitterId',
                            fieldLabel: '提交人',
                            xtype: 'combo',
                            triggerAction: 'all',
                            queryMode: 'remote',
                            hiddenName : 'id',
                            minChars : 1,
                            queryParam: 'nickname',
                            store: submitterStore = Ext.create('Ext.data.Store', {
                                proxy: {
                                    type: 'ajax',
                                    url: 'saler/getQuerySalers.json',
                                    method: 'POST',
                                    reader: {
                                        type: 'json',
                                        totalProperty : 'page.totalCount',
                                        root: 'page.result'
                                    }
                                },
                                pageSize : 2,
                                fields :[{
                                    name : 'id'
                                }, {
                                    name : 'nickname'
                                }]
                            }),
                            valueField: 'id',
                            displayField: 'nickname',
                            listConfig : {
                                minWidth: 280
                            },
                            pageSize : 2
                        }


去国外论坛也没有找到好的解决方案,于是只能自己看源码找到问题所在,贴上解决代码,希望对大家有所帮助:
Ext.apply(Ext.form.field.ComboBox.prototype, {
        doQuery: function(queryString, forceAll) {
            queryString = queryString || '';
            var me = this,
                qe = {
                    query: queryString,
                    forceAll: forceAll,
                    combo: me,
                    cancel: false
                },
                store = me.store,
                isLocalMode = me.queryMode === 'local';

            if (me.fireEvent('beforequery', qe) === false || qe.cancel) {
                return false;
            }

            queryString = qe.query;
            forceAll = qe.forceAll;

            if (forceAll || (queryString.length >= me.minChars)) {
                me.expand();
                if (!me.queryCaching || me.lastQuery !== queryString) {
                    me.lastQuery = queryString;
                    if (isLocalMode) {
                        if (forceAll) {
                            store.clearFilter();
                        } else {
                            store.clearFilter(true);
                            store.filter(me.displayField, queryString);
                        }
                    } else {
                        Ext.apply(store.getProxy().extraParams, me.getParams(queryString));
                        store.load();
                    }
                }
                if (me.getRawValue() !== me.getDisplayValue()) {
                    me.ignoreSelection++;
                    me.picker.getSelectionModel().deselectAll();
                    me.ignoreSelection--;
                }

                if (isLocalMode) {
                    me.doAutoSelect();
                }
                if (me.typeAhead) {
                    me.doTypeAhead();
                }
            }
            return true;
        }
    });