2014-01-17 3 views
1

Мне просто присвоен какой-то проект ушедшего разработчика extjs. В контроллерах, которые он сделал, я обнаружил, звонки, какКак создать геттер и сеттер

this.getMyButton().toggle(true); 
this.getMyContainer().getLayout()... 

Итак, я просто добавил новую форму представления (одна из вещей, мой бывший коллега должен был законченное Рождеством) и попытались вызвать его из контроллер с помощью

this.getMyNewForm().loadRecord(someStore.getAt(0)); 

и Chrome говорит мне, что this.getMyNewForm() не определено. Но нигде в коде я не нашел определения для getMyButton().

В чем дело? Как определить getMyNewForm()?

EDIT: Вопрос ответил на документы (http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.app.Controller-cfg-refs), но проблема все еще открыта.

Ссылка правильно определен в контроллере:

refs: [{ 
    ref  :'MyNewForm', 
    selector :'form[id=myNewForm]' 
}] 

и MyNewForm правильно определяется с учетом

items: [{ 
     xtype: 'form', 
     header:false, 
     frame:false, 
     id:'myNewForm', 
     items: [{ 

, но она не работает, когда я называю

init: function() { 
    this.control({ 
    }); 
    this.getMyNewForm().loadRecord(someStore.getAt(0)); 
}, 
+0

Сначала вы должны изучить то, что уже есть, а не то, что было реализовано. – Don

+1

Вы называете это слишком рано. 'init' для контроллеров вызывается до отображения любого представления. –

+0

@EvanTrimboli Thx! Я поместил вызов в window.afterrender, и теперь он работает. Не могли бы вы ответить на это, так что я могу отметить вопрос, как он ответил? :) – Alexander

ответ

0

Поскольку Эван Trimboli не делает его ответ, позволь мне сделать это:.

«Вы называете это слишком рано для инициализации контроллеров дозвонился до того любое представление отображается ».

0

Вы должны определить этот метод на прототипе конструктора вашего контроллера. Механизм JavaScript стонет просто потому, что вы не определили метод getMyNewForm; Это не волшебство, вы не можете назвать случайный метод.

Вы говорите, что метод getMyButton нигде не содержится в коде. Ну, это просто невозможно. Возможно, что существует некоторая иерархия наследования, и ваш контроллер просто наследуется от конструктора, который определяет этот метод на своем прототипе.

Упомяните, что даже если вы определяете getMyNewForm emthod, вы должны вернуть экземпляр класса, который определяет метод loadRecord; это могло бы, вероятно, будет ExtJS специфическим «класс»

+0

Я только что нашел его в документах, это волшебство: http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.app.Controller-cfg-refs, но моя проблема еще не решена. Теперь у меня есть ref, но метод все еще недоступен. – Alexander

+0

Это не волшебство! Это динамический характер JavaScript – ppoliani

+0

Можете ли вы указать исключение, которое показывают инструменты chrome dev? – ppoliani

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