1

私は1つの共通のビューを実行しました。このビューは、すべてのページで必要です。だから私が必要なところはどこでも、私はxtypeのこのビューを呼んでいます。この共通ビュー内には、id値で定義されたいくつかのコンポーネントがあります。

要件はページによって異なるため、一般的なビューからいくつかのボタンを非表示にする必要があり、再度表示する必要があります。これらの活動はページによって異なります。最初の起動時に画面が表示されます。別のページに移動すると、 Ext.AbstractManager.register()のようなエラーが表示されます。このマネージャーに重複ID「btnLogout」を登録しています。

componetsid値をname値またはitemId値に変更した場合。その後、正常にナビゲートしますが、未定義のsysntaxの表示はvar a = Ext.getCmp('btnBackID');であるため、問題はボタンを非表示および表示できません。console.log(a);、未定義になります。コンポーネントがオブジェクトとして戻ったら、表示機能を非表示にすることができます。

誰かがこの問題をどのように解決するかを教えてもらえますか?どうもありがとうございました。ありがとうございました。私は以下に私のコードを与えました

共通ビュー

Ext.define('abc.view.GlobalNavigationView', {
    extend:'Ext.panel.Panel',
    alias:'widget.globalNavigationView',
    id:'globalNavigationId',
     layout: {
         type: 'vbox',
         align:'stretch'
     },
    items:
        [
            {
                xtype: 'toolbar',
                layout: 'hbox',
                flex: 1,
                items:
                    [
                        {
                            xtype: 'button',
                            flex: .1,
                            text: 'Back',
                            id: 'btnBackID',                    
                        },                        

                        {
                            xtype: 'button',
                            flex:.1,
                            id: 'btnSave',
                            cls: 'saveCls'
                        },
                        {
                            xtype: 'button',
                            flex:.1,
                            id: 'btnEmail',
                            text: 'Email'
                        },
                        {
                            xtype: 'button',
                            flex:.1,
                            id: 'btnPrint',
                            text: 'Print'
                        },
                        {
                            xtype: 'button',
                            flex:.1,
                            itemId: 'btnFilter',
                            text: 'Filter'
                        },
                        {
                            xtype: 'button',
                            flex:.1,
                            id: 'btnLogout',
                            cls: 'logoutCls'
                        }
                    ]
            }

        ]
});

HomeView1

Ext.define('GulfMark.view.WeeklyHomeView1', {
     extend:'Ext.panel.Panel',
     alias:'widget.weeklyfcastView',
     id:'weeklyfcastId',
        layout: 'fit',
        items:
        [
           {
                xtype: 'globalNavigationView',
                id: 'globalNavigationWeekly1',
                flex: 1,
                docked:"top",
                scrollable:false
            },
            {
                my componets of this view
                .........................
            }

        ]
});

HomeView2

Ext.define('GulfMark.view.WeeklyHomeView1', {
     extend:'Ext.panel.Panel',
     alias:'widget.weeklyfcastView',
     id:'weeklyfcastId',
        layout: 'fit',
        items:
        [
           {
                xtype: 'globalNavigationView',
                id: 'globalNavigationWeekly2',
                flex: 1,
                docked:"top",
                scrollable:false
            },
            {
               my componets of this view
                -----------------------
            }

        ]
});

コントローラーコード:

  init:function(){

        this.control({
            'globalNavigationView ':{
                click:this.onbtnBackClick,
                render: this.onbtnBackrender,
            },            
            'weeklyfcastView':{
                show:this.onShowweeklyfcastView,
                render:this.onRenderweeklyfcastView
            }
        });
    },

   onShowweeklyfcastView: function(){       

        var btnFilter = Ext.getCmp('btnFilter');
        console.log(btnFilter); // if i used components id to name or itemId, here will show undefined
        btnFilter.setHidden(true);  
        //btnFilter .hide();

    }
4

2 に答える 2

2

ビューがシングルトンでない場合、そのコンポーネントにIDを指定することはできません。IDは一意である必要があります。そうでない場合、duplicate idエラーが発生します。

本当に必要なのは、ボタンを表示/非表示にしようとしているビューへの参照です。その参照がある場合は、downメソッドを使用してボタンを見つけることができます。例えば:

var iPanel = // Create new panel here.
iPanel.down('button[text="Email"]').hide();
于 2013-03-26T23:34:59.417 に答える
0

このコードは、同じビュー内の複数のボタンに対してEXTJS 6で機能し、同じitemIdを持ちます(idではありません-上記のように、idはエラーをスローします)

意見:

            {
                xtype : 'button',
                text : 'Save and Come Back Button 1',
                itemId : 'saveAndComeBackButton',
                handler : 'saveAndComeBack'
            },
            {
                xtype : 'button',
                text : 'Save and Come Back Button 2',
                itemId : 'saveAndComeBackButton',
                handler : 'saveAndComeBack'
            },

コントローラ:

this.__setButtons('#saveAndComeBackButton','disable');


__setButtons: function (buttonItemId,state) {

    Ext.Array.forEach(
        Ext.ComponentQuery.query(buttonItemId),
        function (button){
            if (state === 'enable'){
                button.enable();
            }else{
                button.disable();
            }
        }
    );

}
于 2016-05-17T21:46:37.020 に答える