Модули проекта и Shell

Предположим, что мы создали новый проект. Далее следует операция наполнения проекта содержанием. Если это - проект лендинга, то никаких дополнительных модулей проект просто не предусматривает, так как всё содержание находится на одной странице. Мы просто кладём Scroll на root, даём ему привязку Anch.fill и помещаем в Scroll необходимые компоненты, обеспечивая их взаимными привязками или превратив Scroll в контейнер.

Теперь предположим, что мы создали проект многостраничного сайта. Учитывая, что приложение sFF априори является одностраничным приложением (SPA), мы должны реализовать возможность загрузки содержания различных страниц (модулей) в главный модуль - модуль проекта. Shell как раз и есть тот инструмент, который позволит нам это сделать. В верхней части модуля проекта кладём узкую Panel для заголовка (если заголовок статичен), привязываем верх к верху root и задаём ширину в 100% и требуемую высоту. А вот ниже кладём Shell, привязываем его справа, слева и снизу к root, а его верх привязываем к низу панели заголовка. Работа над заготовкой сайта завершена.

В Менеджере проектов создаём новый модуль проекта с условным именем Mod. Кладём на него Label и Button в произвольных местах. На кнопке пишем (Buton.text) "Click me", нажимаем поле Signal.click, подтверждаем создание функции, после чего нас автоматически перебрасывает в Редактор Front-функций раздела Code, где в теле созданной функции on_Button_0_pane_click пишем обычное:

$_GC("Label_0").comp.Label.text="Hello, world!";
$_GC("Label_0").comp.BgColor.default=$_GR().randomColor();
$_GC("Label_0").comp.LabelFontColor.default=$_GR().randomColor();

Возвращаемся в раздел Front, переходим обратно к главному модулю проекта, не забывая при этом сохранить изменения во фронте. Выбираем Shell_0, нажимаем поле Signal.onCreate. Соглашаемся. В теле функции on_Shell_0_comp_afterCreate пишем:

$_GC("Shell_0").comp.Shell.src="Mod";

Сохраняем изменения в редакторе функций, нажав на над списком функций, чтобы изменения попали в проект. Переоткрываем проект из Менеджера проектов (можно ответить на вопрос о сохранении отрицательно, так как ничего больше в модуле проекта не редактировали, а механизм обработки сигналов к фронту отношения не имеет, несмотря на появление надписи в поле Signal.onCreate).

Запускаем кнопкой внешний просмотр и видим приложение, с загруженным в Shell_0 модулем Mod с кнопкой Button0, нажав на которую мы получим в Label_0 надпись Hello, world!

При работе с Shell и popup-окнами через некоторое время возникает вопрос: куда девается root модуля при его вызове в качестве донора Shell или popup? Никуда. При загрузке модуля в один из контейнеров из карты $_GAOS().Mod копируются все его компоненты, кроме root, на место которого подставляется сам контейнер, что можно наблюдать в Дереве объектов. Исходя из этого следует вывод, что разукрашивать root вне главного модуля проекта бессмысленно, и если необходимо как-то декорировать задник модуля-донора, необходимо в нём предварительно заливать (Anch.fill) root декорируемой панелью.

Last updated