Доступ к функции в компоненте напрямую - PullRequest
1 голос
/ 13 октября 2008

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

Часть основного приложения:

<mx:ViewStack id="vsAdmin" height="100%" width="100%">
   <mx:TabNavigator id="adminTabs" width="100%" height="100%" historyManagementEnabled="false">
      <myComp:compBeheerdersAdmin id="beheerdersViewstackA"/>
   </mx:TabNavigator>
</mx:ViewStack>

В компоненте compBeheerdersAdmin есть функция requestBeheerdersList (), которая получает данные с сервера и связывает их со списком через обработчик.

После авторизации следующий код из основного приложения:

mainViewstack.selectedChild = vsAdmin;
//beheerdersViewstackA.createComponentsFromDescriptors();
beheerdersViewstackA.requestBeheerdersList();

Функция requestBeheerdersList () ничего не делает (не достигается, я помещаю предупреждение как первый оператор в функцию, но он не отображается), когда я вхожу в систему после новой загрузки SWF, но когда я выхожу из системы и снова вхожу, затем функция достигается и отображается предупреждение, а список заполняется данными с сервера. Есть идеи?

Ответы [ 2 ]

1 голос
/ 13 октября 2008

Я бы удостоверился, что существует компонент, который вы вызываете, перед вызовом следующей функции. Это можно сделать, заставив creationPolicy = all, как вы выяснили. Вы также можете добавить прослушиватель событий для CreationComplete, чтобы вызвать нужную функцию:

private function doThisFirst():void{
        mainViewstack.selectedChild = vsAdmin;
        vsAdmin.addEventListener(FlexEvent.CREATION_COMPLETE,doThis);
}


private function doThis():void{
        beheerdersViewstackA.requestBeheerdersList();
}

Возможно, это не совсем правильно, но я попытался воссоздать ваш конкретный пример. Если вы знакомы с созданием viewstack его дочерних элементов и списков событий, вы сможете приспособить это к вашим конкретным потребностям.

0 голосов
/ 24 октября 2008

В качестве альтернативы, вы можете создать creationComplete в своем mxml

<mx:Canvas ... creationComplete="onCreationComplete()">

<mx:Script>
  <![CDATA[
    private function onCreationComplete():void {
      requestBeheerdersList()
    }
 ]]>
</mx:Script>

или, возможно,

<mx:Canvas ... creationComplete="requestBeheerdersList()">

Сложность Flex заключается в том, чтобы понять, как компонент mxml отображает эквивалентный чистый класс ActionScript. Если в вашем mxml-коде есть что-то вроде , это добавляет в качестве дочернего экземпляр класса. Файл mxml, Mycomponent.mxml, определяет класс. Если они не объявлены как статические, функции, перечисленные в теге , являются функциями, которые применяются к экземпляру. Нет конструктора, который можно явно определить, но экземпляр недоступен до фактического создания. Поэтому вам нужно полагаться на creationComplete для выполнения любой функции, которую вы бы вызвали из функции конструктора строго класса AS3.

...