29.12.2014, 07:44 | #1 |
Участник
|
Что возвращает метод runbase()?
Здравствуйте.
Какое прдназначение метода runbase? например в следующем коде: tutorial_RunbaseForm = element.args().caller().runbase(); |
|
29.12.2014, 11:46 | #2 |
Участник
|
1. подозреваю, что метод возвращает ссылку на экземпляр класса Runbase
2. это говнокод |
|
29.12.2014, 15:56 | #3 |
Участник
|
Это организация взаимных ссылок между формой и классом, который ее обслуживает. Просто разработчики исходили из предположения, что класс, из которого вызвана форма не обязательно будет тем классом, который используется при работе формы. Хотя, по-умолчанию, метод RunBase вернет ссылку на класс caller(). В данном случае на класс tutorial_RunbaseForm.
Это можно сравнить с методом RunBaseReport.queryRun(). Тот запрос, который используется в диалоге вовсе не обязательно будет тем же запросом, который используется при исполнении в отчете. Это можно организовать, если подсунуть в этот метод свою переменную. На практике, метод runBase() используется в цепочке диалогов, когда из основной формы диалога вызываются вспомогательные диалоги настройки запросов и надо по ссылкам добраться до "корневого" класса цепочки. Конкретно RunBase нужен для того, чтобы быть уверенным, что будут существовать некие методы, созданные в классе RunBase.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: Logger (3), S.Kuskov (5), MaxHammer (1). |
29.12.2014, 16:55 | #4 |
Участник
|
|
|
29.12.2014, 18:32 | #5 |
Участник
|
Цитата:
|
|
29.12.2014, 18:46 | #6 |
Участник
|
Цитата:
Сообщение от gl00mie
Помнится, в подобных ситуациях caller - это DialogRunbase, от него самого форме проку мало, он возвращает ссылку на собственно класс, который может реализовывать ту или иную презентационную логику.Слишком много неявных предположений, которые не проверяются ни компилятором, ни самим кодом во время выполнения.
|
|
30.12.2014, 00:19 | #7 |
Участник
|
А чего непонятного? В tutorial-примере показывается, как использовать RunBase вместе с "настоящей" формой, но при этом
X++: DialogRunbase dialog = Dialog::newFormnameRunbase(formstr(tutorial_RunbaseForm), this); Но раз мы затеяли собирать форму не полностью в runtime, значит, она предполагает какую-то затейливую презентационную логику и/или дизайн - "представление", одним словом (в терминах MVC). Логику мы как нормальные программисты пишем в классах, а не на формах, следовательно, форме надо иметь доступ к своему классу-"контроллеру". Таковым в случае инфраструктуры RunBase выступает все тот же наш класс-наследник, который выполняет и бизнес-логику. Но поскольку для унификации вывода и получения значений параметров он использует в качестве "прослойки" инфраструктруру Dialog, то с точки зрения формы непосредственно вызывающим ее объектом оказывается экземпляр класса DialogRunbase, а вовсе не наш наследник RunBase. Так вот, чтобы форма через класс-прослойку могла достучаться до контроллера, в этом классе-прослойке и реализован метод, возвращающий ссылку на RunBase. |
|
|
За это сообщение автора поблагодарили: S.Kuskov (5), MaxHammer (1). |
30.12.2014, 08:25 | #8 |
Участник
|
спасибо
|
|