2016-06-10 85 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