2015-09-11 2 views
0

Я использовал ExtJS некоторое время, но теперь я пытаюсь преобразовать свои проекты, чтобы правильно использовать стиль MVC, который они рекомендуют.Слушатель событий, не вызывающий контроллер, когда объявлен в initComponent

У меня есть вид и контроллер. Я пытаюсь объявить прослушиватель событий для boxready для вызова метода контроллера. Это не работает, когда я объявляю слушателя внутри initComponent - он говорит, что не может найти метод в моем представлении, когда я ожидаю, что он найдет метод в моем контроллере.

См jsFiddle здесь, например (соответствующий код в MyPanel.js): senchafiddle

+1

Предлагаем Вам прочитать эту тему: https://www.sencha.com/forum/showthread.php?300377 –

ответ

1

Там нет необходимости прикрепить слушателя внутри InitComponent, сделайте это декларативно:

listeners: { 
    boxready: 'controllerMethodName' 
} 

Объявите это непосредственно Ваше мнение.

1

Вы можете сделать это, как предложил Брэндон. Я думаю, что это также то, что Sencha имеет в своей документации.

Я делаю это немного по-другому, потому что я не знаю, что нужно знать о контроллере. Что касается вашего примера, то есть: представление не должно знать, что внутри контроллера есть или должна быть функция test(). Посмотрите на Init() внутри контроллера:

Ext.define('MyApp.view.MyPanelController', { 
    extend: 'Ext.app.ViewController', 
    alias: 'controller.mypanel', 

    init: function() { 
     this.getView().on("boxready",this.test, this); 
    }, 

    test: function() { 

     Ext.Msg.alert('hi'); 
    } 
}); 

И очень мало в представлении:

Ext.define('MyApp.view.MyPanel', { 
    extend: 'Ext.form.Panel', 
    xtype: 'mypanel', 
    controller: 'mypanel', 

    html: 'sometext', 
    title: 'sometitle' 
}); 

Это может иметь некоторые недостатки, что я не в курсе.

Заканчивать это соответствующий sfiddle: https://fiddle.sencha.com/#fiddle/tpm

+0

Можно утверждать, что ВК и вид по своей природе, в сочетании. Поэтому я не думаю, что имеет смысл делать это таким образом. –

+0

Да, они связаны атрибутом «controller». Но я не понимаю, почему View должен знать о функциях контроллера. Это задача контроллера, чтобы действовать на действия, вызванные представлением, и затем соответствующим образом изменить представление. Если View сообщает контроллеру, какая функция реагирует на событие, тогда элемент управления View контролирует контроллер. –

+0

Вид не знает о реализации контроллера, но только для интерфейса, доступного для делегирования. Эта связь теряется, и вы можете легко менять контроллеры, просто применяя те же методы. –

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

  • Нет связанных вопросов^_^