2010-09-29 35 views
1

我編寫特殊的組合對象以將其用作鏈接的組合框。那就是:ExtJS:鏈接的組合框拼圖

comboDivClass = Ext.extend(Ext.form.ComboBox, { 
      fieldLabel: 'Divisions', 
      anchor: '95%', 
      lazyRender:true, 
      store:new Ext.data.Store({ 
        proxy: proxy, 
        baseParams:{rfb_type:'divisions'}, 
        reader: divReader, 
        autoLoad: true 
      }), 
      displayField:'div_name', 
      allowBlank:false, 
      valueField:'div_id', 
      triggerAction:'all', 
      mode:'local', 
      listeners:{ 
       select:{ 
        fn:function(combo, value) { 

         if (this.idChildCombo) { 
          var modelCmp = Ext.getCmp(this.idChildCombo); 
          modelCmp.setValue(''); 
          modelCmp.getStore().reload({ 
           params: { 'div_id': this.getValue() } 
          }); 
         } 
        } 
       } 
      },/**/ 
      hiddenName:'div_id', 
      initComponent: function() {comboDivClass.superclass.initComponent.call(this);}}) 

正如你可以看到,在孩子的ComboBox商店此組合框的負載數據(設置爲idChildCombo)。 好的。這是我如何把它聲明

new comboDivClass({id:'sub0div',idChildCombo:'sub1div'}), 
new comboDivClass({id:'sub1div'}) 

是它的工作原理,但它有一些奇怪的麻煩 - 它裝載不僅sub1div商店,它在sub0div店負載太大。爲什麼?什麼即時做錯了?

+0

'proxy:proxy,'<---所有實例使用一個代理 – Mchl 2010-09-29 13:29:55

+0

沒有。嘗試一下。我tryig使用不同的代理,沒有任何改變。 (即時嘗試使用不同的閱讀器:) – 2010-09-29 13:36:37

回答

1

我看到的一件事是你有mode: 'local'配置,而它應該是遠程的。

其他的事情要考慮:你爲什麼不這樣做更多的是這樣的:

var c1 = new comboDivClass({id:'sub0div'}); 
var c2 = new comboDivClass({id:'sub1div'}); 
c1.on('select',function(combo, value) {c2.getStore().reload({ 
    params: { 'div_id': c1.getValue() } 
})}); 
+0

謝謝,但遠程處理模式:'本地'不要改變任何東西,並在你的例子我得到同樣的結果 - 數據加載在兩個商店:( – 2010-09-29 12:23:32

1
ChildCombo.setMasterField(masterField) { 
    masterField.on('change', function(field){ 
    this.getStore().filterBy(function(){ //filter by masterFIeld.getValue() }); 
    }) 
} 

的想法是子字段鏈接到父不父到子和這種方式,您可以鏈接到任何形式的領域不僅組合。

這裏在兒童組合中,您必須有三欄[組,值,標籤],其中組是主場值。

通過這種方式,您可以管理模式而不是一個主域。