2016-10-31 12 views
0

У меня есть простой код здесь. Он создает приложение под названием «MyApp» и определяет контроллер под названием «MyController». MyController затем передается в качестве конфигурации в приложение.Не удается получить доступ к контроллерам извне объекта

  function onDeviceReady() { 

       alert('In onDeviceReady() function'); 

       MyApp.app.getController('MyController').somefunction(); 
//    MyApp.controller.MyController.somefunction() 
      } 

      Ext.application({ 
       name: 'MyApp', 
       controllers: ['MyController'] 
      }); 

      Ext.define('MyApp.controller.MyController', { 
       extend: 'Ext.app.Controller', 

       init: function() { 
        alert('Login controller'); 
        onDeviceReady(); 
       }, 

       somefunction:function(){ 
        alert ('some function callled') 
       } 
      }); 

Пока все хорошо. Типичный стандартный материал. Теперь после вызова «init» из MyController я вызываю какой-то внешний метод onDevideReady. Из этого метода я хочу снова получить доступ к моему контроллеру. .

Я пытался среди прочего:

  • MyApp.app.getController ('') MyController SomeFunction();
  • MyApp.controller.MyController.somefunction()

Но ни одна из этих вещей, кажется, работают ... Я также использую Extjs 4,1, который может быть проблемой. В основном я хочу, чтобы каким-то образом получить доступ к моим контроллерам внутри моего кода (не обязательно из другого контроллера)

Вот скрипка проблемы:

https://fiddle.sencha.com/#fiddle/1jjh

ответ

2

Ни один вопрос для меня (когда я переместить контроллер/приложение).

function onDeviceReady() { 
    MyApp.app.getController('MyController').somefunction(); 
} 

Ext.define('MyApp.controller.MyController', { 
    extend: 'Ext.app.Controller', 

    init: function() { 
     onDeviceReady(); 
    }, 

    somefunction: function() { 
     alert('some function callled') 
    } 
}); 

Ext.application({ 
    name: 'MyApp', 
    controllers: ['MyController'] 
}); 

https://fiddle.sencha.com/#fiddle/1jk7

Nont действительно так, как я хотел бы сделать вещи, однако. Я бы предпочел не иметь глобальную функцию и не заглядывать глубоко в мое приложение. Я бы предпочел иметь класс singleton, чтобы я запускал события, и тогда контроллер будет слушать эти события. Кроме того, сойдите с 4.1 :)

+0

да, я бы хотел выйти из Extjs 4. Архитектура MVC в 5+ намного лучше :). Архитектура MVC в 4 действительно ужасна. –