2013-09-26 5 views
0

http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.form.field.ComboBox имеет событие beforeQuery. Но когда я пробую это, я получаю жалобу, что нет запроса.extjs 4.2 как создать queryplan

Как это можно установить? Я не могу найти никакой документации в том, как настроить запрос.

       { 
            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; 
            }, ... 

ответ

0

Короче:

Вы переопределение метода 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 и ничего не возвращаете (или 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 => возвращают план выполнения запроса еще использовать событие вместо этого. Как вы можете видеть, используя событие, вы также можете отменить запрос, вернув false в обработчик события beforeQuery.

Смежные вопросы