2016-06-10 87 views
0

我有一個ExtJS 6應用程序。我正在使用帶有自定義選擇器的TagField組件,這是一個帶有工具欄和一些按鈕的網格。在某些情況下,我想使用不同的選擇器。要使用的選擇器將由商店記錄計數確定。ExtJS - 動態更改下拉/選取器

所以,如果記錄計數> 50我想說明選擇器A,否則顯示選擇器B.

我現在面臨的問題是,選擇器是其商店(這是有道理的)之前創建的,一旦選擇器創建它不能被改變AFAIK。當商店加載時,我檢查了記錄數,但更改選取器已經太晚了。

那麼有什麼辦法可以摧毀選取器並設置一個新的?我需要像「setPicker()」方法。

感謝

回答

1

更實際的解決辦法是創建兩個TagField組件。一個使用選擇器A,另一個使用選擇器B.然後,您只需爲商店添加一個偵聽器load事件並根據您的條件顯示/隱藏適當的組件。

不是那麼簡潔,但容易和快速實施。

+0

我認爲同樣的,但是這不會爲我們工作,因爲領域都是動態的,來自數據庫所以性能明智,我們不能有一個額外的隱藏領域,以防萬一 – stackato

0

我只是使用一個選擇器,並改變它的商店,以保持簡單。揀貨機(組合框)渲染後,你可以決定哪些存儲基於選擇器中的商店

 { 
     xtype: 'combobox', 
     fieldLabel: 'Label', 
     listeners: { 
      afterrender: { 
       fn: 'onComboboxAfterRender', 
       scope: 'controller' 
      } 
     } 
    } 

的記錄數在控制器中使用它:

onComboboxAfterRender: function(component, eOpts) { 
    var store1 = this.getViewModel().getStore('store1'), 
     store2 = this.getViewModel().getStore('store2'); 

    if(store1.count > 50){ 
     component.bindStore(store1); 
    }else{ 
     component.bindStore(store2); 
    } 
} 
+0

我只是想知道,第二家商店從哪裏來? – ASP

+0

即時通訊不知道這是如何解決我的問題,但改變下拉不再是我們的要求,我不會擔心它:)謝謝反正 – stackato