2011-08-05 3 views
0

"livesearch"콤보 상자에 동적 데이터를 추가하려고합니다.extjs4 : chained combo

2 개의 콤보 세트가 있습니다.

첫 번째 데이터를 선택하면 데이터를 선택할 수 있습니다. 두 번째 콤보는 첫 번째 콤보에서 동적 매개 변수가 있어야하는 "livesearch"콤보입니다. 두 번째 콤보는 서버를 쿼리하고 데이터를 출력하는 데이터 저장소에 연결된 모델에 연결됩니다. 하지만 그 데이터는 첫 번째 콤보 매개 변수에 따라 필터링되어야합니다 ...

누구나 어떻게 할 수 있는지 알고 있습니까?

답변

0

나는 그랬다 before. 열쇠는 두 번째 콤보의 값을 요청한 첫 번째 콤보의 값을 전달한 다음 서버에서 결과를 필터링하는 것입니다. 다른 방법은 모든 가능한 값으로 두 콤보를로드 한 다음 첫 번째 콤보에서 값을 선택한 후 두 번째 콤보 저장소에서 필터를 설정하는 것입니다.

편집 : 여기 제가 사용했습니다.

Ext.define('Ext.ux.FilteredCombo', { 
extend: 'Ext.form.field.ComboBox', 
alias: 'widget.filteredcombo', 

queryCaching: false, 

getParams: function (queryString) { 
    var params = this.callParent(arguments); 
    if (Ext.isArray(this.formParams)) { 
     var form = this.up('form'); 
     if (form) { 
      var bf = form.getForm(); 
      for (var i = 0; i < this.formParams.length; i++) { 
       var field = bf.findField(this.formParams[i]); 
       if (field) 
        params[this.formParams[i]] = field.getValue(); 
      } 
     } 
    } 
    return params; 
} 
}); 
+0

예, 데이터 저장소의 요청에 콤보 값을 전달하면됩니다. 콤보 값을 얻을 수 있지만 서버에서 데이터 저장소로 데이터를 가져올 수는 있지만 사용자가 콤보 상자에 텍스트를 입력하기 시작하면 데이터 저장소 매개 변수를 동적으로 업데이트 할 수 없습니다. 예를 들어 사용자가 상점 재로드를 처리하기 때문에 사용자가 무언가를 클릭하면 새로운 매개 변수로 데이터 저장소를 다시로드 할 수 있지만 저장소 재로드는 아마도 콤보에 의해 처리됩니다. 나는 코드의 해당 부분을 다시 작성하지만 그것은 추한 것입니다 ... – lapos34

+0

다시로드 문제를 해결하려면 queryCaching : store config에 false를 추가하십시오. 또한 필자가 사용한 코드를 추가했습니다. – Marko