0

従属コンボボックスの 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();
                                                            }
                                                        }

        }

}、

ありがとうございました!

4

1 に答える 1

0

ストア ロード メソッドは非同期です。つまり、loadData の後のコードはすぐに実行されますが、データはまだロードされていません。loadData のコールバックで残りのロジックを実行するか、ロード イベント リスナーで個別に実行する必要があります。

于 2012-10-19T21:05:42.830 に答える