Справочное управление статической функцией 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)