0

私はExtJs 6.2を持っています。アプリケーション (最新のツールキット) と、メニューの例(トップ メニュー)を実装したいと考えています。したがって、Main.jsファイルに次のコードがあります。

Ext.define('MyApp.view.main.Main', {
    extend: 'Ext.Container',
    xtype: 'app-main',

    layout: {
        type: 'vbox',
        pack: 'center',
        align: 'stretch'
    },
    controller: 'mainController',
    margin: '0 0 0 0',
    items: [{
        xtype: 'toolbar',
        docked: 'top',
        style: 'background-color: red;',
        items: [{
            text: 'Menu',
            handler: function() {
                Ext.Viewport.toggleMenu('top');
            }
        }]
    }],
    initialize: function() {
         Ext.Viewport.setMenu(this.getMenuCfg('top'), {side: 'top' });
    },

    doDestroy: function() {
        Ext.Viewport.removeMenu('top');
        this.callParent();
    },
    getMenuCfg: function(side) {
        return {
            items: [{
                text: 'Foo',
                handler: 'onFooClick',
                controller: 'mainController'
            }]
        };
    }
});

クリックするとMenu、メニューが表示されます(必要に応じて)。しかしfoo、メニュー内のボタンをクリックすると、次のエラーが発生します。

No method named "onFooClick" on Ext.Button(...)

同じディレクトリにあるコントローラーMainController.jsは次のようになります。

Ext.define('MyApp.view.main.MainController', {
    extend: 'Ext.app.ViewController',
    alias: 'controller.mainController',


    onFooClick: function() {
        console.log("foo pressed");
    }
});

私はすでに(関数scope内で)このように設定しようとしました:getMenuCfg

 items: [{
                    text: 'Foo',
                    handler: 'onFooClick',
                    controller: 'mainController',
                    scope: 'controller'
                }]

しかし、その後、次のエラーが発生します。

Uncaught Error: Named method "onFooClick" requires a scope object(…)

このメニューを使用してコントローラーにアクセスするにはどうすればよいですか?

4

1 に答える 1

0

問題が何であるかはわかりませんでしたが、このonfooClick関数をMain.jsファイルに追加して回避策を作成しました。

onfooClick: function () {
        this.getController(Ext.String.capitalize('mainController')).onFooClick();
}

これにより、コントローラーからメソッドを呼び出す独自のonFooClickメソッドが呼び出されます。Main.jsonFooClick

于 2016-11-16T16:10:22.203 に答える