ExtJS - 依赖组合框

Posted

技术标签:

【中文标题】ExtJS - 依赖组合框【英文标题】:ExtJS - dependent combobox 【发布时间】:2012-10-10 02:39:35 【问题描述】:

我的依赖组合框中的 loadData() 函数有问题。 我正在做一张桌子,在那里我可以创建快捷方式并对其进行修改。

尝试修改快捷方式并将“Tab con URL”传递给“Tab con Info de sistema”时会出现问题。 当我选择 id="sistemas" 的组合时,在 loadData 函数中检测到错误。没有数据加载给我带来了商店中的 GetMenu 功能。 返回 GetMenu 函数的数据未加载到存储中。

我不知道为什么。这是我的代码,谁能帮帮我?

店铺:

var cmb_menu = new Ext.data.SimpleStore(
            fields : ['id', 'menu'],
            data   : menu
            );

代码:

    
      xtype    : "radio",
      boxLabel : "Tab con Info de sistema",
      value    : "oneway",
      tabIndex : 1,
      id       :'IdCheck',
      name     : "rt_rt_radiobutton",
      listeners: 
      check: function()
        Ext.getCmp("sistemas").enable();
        Ext.getCmp("iconUrl").disable();
        
      
   ,  


    
      xtype:"radio",
      boxLabel:"Tab con URL",
      value:"twoway",
      id: 'idCheckedUrl',
      tabIndex:1,
      name:"rt_rt_radiobutton",
      listeners: 
          check: function (ctl, val)  
                if(val)
                    Ext.getCmp("iconUrl").enable();
                    Ext.getCmp("sistemas").disable();
                    Ext.getCmp("sistemas").clearValue();
                    Ext.getCmp("menus").clearValue();
                    Ext.getCmp("items").clearValue();
                    Ext.getCmp("subMenu").clearValue();
                    Ext.getCmp("menus").disable();
                    Ext.getCmp("items").disable();
                    Ext.getCmp("subMenu").disable();
                        
                         
                    
     ,
    
     xtype        : 'combo',
     store        : cmb_sistemas,
     hiddenName   : 'id_sistema',
     allowBlank   : false, 
     value       : sistemId,
     mode         : 'local',
     fieldLabel   : 'Sistemas',
     disabled     : true,
     name         : 'sistemas',
     id           : 'sistemas',
     anchor       : '90%',
     displayField : 'sistema',
     triggerAction: 'all',  //rdiaz
     emptyText    : 'Seleccione un sistema',//rdiaz
     editable     : false, //rdiaz
     valueField   : 'id',
     listeners    : 
        select: function ()
            idSistema = this.getValue();
                nombreSistema= this.getRawValue();
                var menu = Ext.getCmp("menus");
                iMenu = getMenu(idSistema);
                //menu.store.clear();
                menu.store.loadData(iMenu, true);
                menu.enable();
                var items = Ext.getCmp("items");    
                //menu.clearValue();    
                //menu.store.removeAll();//rdiaz        
                items.clearValue();
                items.disable();
                var subMenues= Ext.getCmp("subMenu");   
                subMenues.clearValue();
                subMenues.disable();
                                                            
            
    ,
    
    xtype        : 'combo',
    store        : cmb_menu,
    hiddenName   : 'id',
    valueField   : 'id',
    value        : menuID, 
    mode         : 'local',
    allowBlank   : false,
    fieldLabel   : 'menu',
    disabled     : true,
    triggerAction: 'all',//rdiaz
    emptyText    : 'Seleccione un menu',//rdiaz
    editable     : false, //rdiaz
    name         : 'menus',
    id           : 'menus',
    anchor       : '90%',
    displayField : 'menu',
    listeners    : 
        select: function ()                                            
                                                        selectedMenu = this.getValue();
            Ext.getCmp("subMenu").clearValue(); 
            //alert(selectedMenu);
            idSistema = Ext.getCmp("sistemas").getValue();  
            mItems    = getItemsMenu(selectedMenu, idSistema);
            if($.trim(selectedMenu) == "000060000000010000")
                var subMenues= Ext.getCmp("subMenu");   
                subMenues.store.loadData(mItems);
                subMenues.enable();
                var items    = Ext.getCmp("items");
                items.clearValue();
                items.enable();
                else
                    var subMenues= Ext.getCmp("subMenu");   
                    subMenues.store.loadData(mItems);
                    subMenues.disable();
                    var items    = Ext.getCmp("items"); 
                    //alert(mItems);
                    items.store.loadData(mItems);
                    items.clearValue();
                    items.enable();
                                                            
                                                        

        

,

谢谢!

【问题讨论】:

【参考方案1】:

Store 加载方法是异步的,即 loadData 之后的代码会立即执行,但数据尚未加载。 您需要在 loadData 的回调中执行其余逻辑,或者在加载事件侦听器中单独执行。

【讨论】:

以上是关于ExtJS - 依赖组合框的主要内容,如果未能解决你的问题,请参考以下文章

ExtJS组合框无法渲染

extjs 表单元素中的 Extjs 组合框在禁用时未灰显

extjs 组合框在单击时显示空白列表

网格内的 ExtJS 组合框

EXTJS4 中的链接组合框

ExtJS 组合框和过滤存储