2016-11-15 4 views
0

У меня есть ExtJs 6.2. приложение (современный инструментарий), и я хочу реализовать menu example (верхнее меню). Поэтому у меня есть этот код в моем Main.js файле:Контроллер доступа в примере меню кухни кухни extjs

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(…) 

Как я могу получить доступ к своему контроллеру, используя это меню?

+0

Пожалуйста, проверьте все вхождения 'onCreateFolderClick',' onFooClick', 'onFooClicked', используете ли вы одно и то же имя, поэтому мы можем быть уверены, что проблема не является неправильно названной функцией или вызовом. – Alexander

+0

Я перепутал имена метода при создании минимального примера для stackoverflow, но я понял это в своем приложении (просто проверил его, чтобы убедиться). Есть ли что-то еще, что может вызвать проблему? – Peter

ответ

0

я не выяснить, что проблема, но создается обходной путь, добавив эту onfooClick функцию к Main.js файла:

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

Это будет вызывать собственный onFooClick метод внутри Main.js который вызывает метод onFooClick из контроллер.

Смежные вопросы