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 방법를 오버라이드 (override) 대신 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의 메소드를 오버라이드 (override)하는 경우 => 그렇지 않으면 queryPlan을 반환하는 대신 이벤트를 사용

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 방법은 모습입니다. 보시다시피 이벤트를 사용하면 beforeQuery의 이벤트 핸들러에서 false를 반환하여 쿼리를 취소 할 수도 있습니다.

관련 문제