Как получить доступ к общедоступной функции за пределами представления, в котором она используется в Flex? - PullRequest
0 голосов
/ 06 февраля 2012

Привет, я работал над приложением Flex Mobile с использованием Flash Builder 4.6.

У меня есть 2 mxml 'views' в моем проекте. В одном файле MXML у меня есть функция, которая захватывает данные XML. В моем другом файле mxml у меня есть кнопка обновления, которая при нажатии должна вызывать функцию в первом файле mxml, чтобы снова получить данные XML. Я не знаю, как вызвать эту функцию из-за пределов mxml-файла, в котором она находится.

Я ценю любую помощь, оказанную. Спасибо!

[ОБНОВЛЕНИЕ № 2] *

Я подумал, что должен поделиться некоторыми подробностями о моей проблеме.

  1. Это мобильное приложение клиента Reddit. Получает каналы и т. Д.
  2. В моем главном представлении под названием RedditReaderHomeView.mxml я использую искровой компонент splitViewNavigator для размещения двух других представлений, например, так:

RedditReaderHomeView.mxml

    <s:SplitViewNavigator width="100%" height="100%" id="splitViewNavigator" autoHideFirstViewNavigator="true">
        <s:ViewNavigator id="redditList" firstView="views.subredditList" width="300" height="100%"/>
        <s:ViewNavigator id="redditFeed" firstView="views.redditFeed" width="100%" height="100%">

            <s:actionContent.landscape>
                <s:Button id="refreshButtonlLandscape" icon="@Embed('assets/refresh160.png')" click="refreshRSS()" />
            </s:actionContent.landscape>

            <s:actionContent.portrait>
                <s:Button id="refreshButton" icon="@Embed('assets/refresh160.png')"  />
                <s:Button id="navigatorButton" label="Search" click="splitViewNavigator.showFirstViewNavigatorInPopUp(navigatorButton)" />
            </s:actionContent.portrait>
        </s:ViewNavigator>
    </s:SplitViewNavigator>
  1. Как вы можете видеть из кода выше, на моем главном экране у меня есть кнопка с идентификатором «refreshButton». Когда я нажимаю эту кнопку, я хочу обновить данные Reddit. Другими словами, я хочу вызвать функцию для обновления данных, которая находится в представлении redditFeed.
  2. Это функция, которая находится в отдельном представлении с именем 'redditFeed.mxml', которую я хочу вызвать с помощью кнопки обновления в главном представлении, показанном выше.

redditFeed.mxml

    protected function myList_creationCompleteHandler(url:String):void
            {

                getRedditFeedResult.token = redditFeedGrabber.getRedditFeed(url);
                getRedditFeedResult.addEventListener(ResultEvent.RESULT,busyOff);

            }

Надеюсь, это помогло устранить путаницу в том, что я пытался сделать. Я предполагаю, что решение довольно простое, но, увы, я начинающий программист и новичок во Flex, поэтому я учусь на веревках. Любая помощь приветствуется. Спасибо!

Ответы [ 2 ]

1 голос
/ 06 февраля 2012

Если у вас есть экземпляр представления, просто выполните:

myViewInstance.myPublicFunction();  

В MXML элемент id тега MXML используется для ссылки на представление в ActionScript. Поскольку вы не описали свою архитектуру; неясно, как одно представление может назвать другое.

Если представление, которое должно инициировать вызов, является родителем представления, в котором есть функция для выполнения вызова, то вы можете использовать подход, описанный выше.

Если представление, которому необходимо инициировать вызов, является дочерним по отношению к представлению, в котором есть функция для выполнения вызова, то вам следует отправить событие от «потомка», которое родитель может прослушивать. В обработчике событий вы бы инициировали вызов.

Если представление, которое должно инициировать, и представление, имеющее функцию для вызова, оба являются потомками одного и того же родителя; затем вы должны отправить событие из представления «Триггер», прослушать его в родительском объекте и затем использовать этот прослушиватель событий для выполнения вызова (используя код, подобный тому, что я объяснил выше).

Если у вас более сложная архитектура этих двух представлений; тогда вы должны изучить какой-нибудь метод для инкапсуляции функциональности «удаленного вызова», например, в класс обслуживания. Многие фреймворки предлагают подходы для совместного использования этого класса обслуживания и / или результатов между несколькими классами. (Файлы MXML являются классами).

0 голосов
/ 06 февраля 2012

Есть два способа сделать это, не вдаваясь в плохую архитектуру, если дочернее представление явно знает о своем родителе:

  1. Ваше дочернее представление может генерировать событие, которое родитель прослушивает,Затем родительский объект вызовет функцию
  2. Дочернее представление может иметь открытое свойство типа Function.Родительское представление передает ссылку на эту функцию, устанавливая переменную.Затем дочерний вид вызывает функцию (после проверки, чтобы убедиться, что она не равна нулю).
...