Гибкий:Доступ к функциям / компонентам на страницах mxml

StackOverflow https://stackoverflow.com/questions/187795

  •  06-07-2019
  •  | 
  •  

Вопрос

Для простоты предположим, что у меня есть две страницы flex mxml.

форма.mxml
кнопка.mxml

Если страница form.mxml содержит следующий код, она должна работать нормально:

<custom:SelectView dSource="{_thedata}" id="form" visible="false">
</custom:SelectView>

<mx:LinkButton label="Show" id="lbShow" click="form.visible=true;>
<mx:LinkButton label="Show" id="lbHide" click="form.visible=false;>

Но если бы код был похож:

форма.mxml

 <custom:SelectView dSource="{_thedata}" id="form" visible="false">
 </custom:SelectView>

кнопка.mxml

<mx:LinkButton label="Show" id="lbShow" click="form.visible=true;>
<mx:LinkButton label="Show" id="lbHide" click="form.visible=false;>

как я могу выполнить вызов из button.mxml, чтобы изменить form.mxml

---- немного подробнее ---

Моя страница на самом деле выглядит так:где query:AdvancedSearchFields в основном включает гибкую форму на страницу, и я хочу, чтобы она показывала / скрывала пользовательский вид ниже после завершения поиска.

<query:AdvancedSearchFields searchType="projects" searchCategory="advanced" visible="true" id="AdvancedSearch" />

<custom:SelectView dSource="{_searchResults}" id="sv" visible="false">
Это было полезно?

Решение

Вы могли бы написать пользовательский метод, который обрабатывает события нажатия кнопки и вызывает пользовательское событие.Затем в form.mxml вы можете обработать это событие.

Разделение его таким образом немного чище, так как это заставляет файл button.mxml работать сам по себе.Наличие в Button.mxml прямой ссылки на вашу форму приводит к тесной связи между ними, и, как правило, вам следует избегать тесной связи.

Редактировать:У меня только что возникла другая мысль, которая также позволяет избежать жесткой связи и немного проще:

форма.mxml

<custom:SelectView dSource="{_thedata}" id="form" visible="{buttons.showForm}">
</custom:SelectView>

<!-- include your buttons.mxml component using an ID of "buttons" -->

кнопки.mxml

<mx:Script>
<![CDATA[
    [Bindable] public var showForm:Boolean = true;
]]>
</mx:Script>

<mx:LinkButton label="Show" id="lbShow" click="this.showForm=true;">
<mx:LinkButton label="Hide" id="lbHide" click="this.showForm=false;">

По сути, это эмулирует использование пользовательского события с помощью привязки переменной.Каждый раз, когда переменная showForm в кнопках изменяется, свойство visible SelectView будет обновляться с помощью привязок.Это легче, чем создание пользовательского события (хотя я думаю, что пользовательские события немного лучше подходят для его оформления).

Другие советы

Ваш button.mxml класс должен иметь ссылку на экземпляр класса 'form', который будет затронут.Тогда он может воздействовать на него напрямую:

Кнопка.mxml:

<mx:Script>
<![CDATA[
    [Bindable] public var myForm:MyFormClass;
]]>
</mx:Script>

<mx:LinkButton label="Show" id="lbShow" click="myForm.form.visible=true;">
<mx:LinkButton label="Show" id="lbHide" click="myForm.form.visible=false;">

Как правило, наиболее логичным местом для установки этой переменной является родительский файл вашего Button класс.

Если вам нужно чаще сталкиваться с этой проблемой, я бы посоветовал использовать MVC-фреймворк, такой как PureMVC.Он настроен так, что у вас есть объект-посредник, который прослушивает события из компонентов MXML, затем отправляет уведомление, которое может быть получено любым другим посредником.Затем этот посредник может манипулировать своим собственным визуальным компонентом на основе уведомления и связанных с ним данных.

В контексте того, что вы делаете (простая версия), вас устраивает базовое решение.Но как только вы будете иметь дело с четырьмя, пятью или более компонентами с большим количеством логики, вы совсем не будете счастливы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top