Справочное управление статической функцией Adobe Flex

Можно ли ссылаться на элемент управления в приложении из статической функции?

У меня есть Viewstack, содержащий VBox-ы, хранящиеся в отдельных элементах управления. Пример:

<mx:ViewStack id="content" width="100%" height="100%" resizeToContent="true">
    <controls:Login/>
    <controls:Dash/>            
    <controls:Input/>   
    <controls:Review/>
    <controls:Search/>  
</mx:ViewStack>     

После того, как я войду в свой контроль входа в систему, я хотел бы изменить выбранный индекс моего ViewStack. Из внешних элементов управления я не могу ссылаться на свой ViewStack по имени. Я могу ссылаться на общедоступную статическую функцию из внешнего элемента управления, однако я не могу ссылаться на ViewStack изнутри этой функции. Любая помощь с благодарностью.

JH

3 ответа

Решение

Обычно у вас может быть одноэлементный класс, в котором вы можете сохранить экземпляр основного приложения, и если вы просматриваете, что стек находится внутри вашего основного приложения, то вы можете сделать что-то вроде этого

public static function changeIndex(index:int):void
{
    FlexGlobals.topLevelApplication.content.selectedIndex = index;
    //urappinstance.content.selectedIndex = index;
}

Вы можете достичь этого, начиная с FlexGlobals.topLevelApplication (если он виден оттуда). Хотя дизайн такой вещи может быть сомнительным.

Можно ли ссылаться на элемент управления в приложении из статической функции?

Вообще нет. Статическая функция (или свойство) существует в самом классе. Принимая во внимание, что дочерние элементы MXML, например, в стеке представлений, существуют в конкретном экземпляре класса. Функция уровня класса ничего не будет знать о каких-либо конкретных экземплярах класса и не сможет получить доступ к свойствам конкретного экземпляра.

Однако вы можете передать экземпляр класса в статическую функцию и таким образом получить доступ к свойствам. что-то вроде этого:

public static function doStuff(myViewStack:ViewStack):void{
 trace(myViewStack.id)
 // do other stuff
}

И назовите это так:

MyClass.doStuff(content)
Другие вопросы по тегам