Команда AnyChart.Com Team продолжает радовать. На этот раз они раскопали, как создать кастомный design-time preview для своих Flex компонентов. Привожу русскоязычный вариант статьи (оригинал тут) от авторов:
Иногда необходимо сделать кастомный Design-time Preview для компонента (это его вид в "Design View" Flex Builder-а). Для этих целей в Adobe Flex 3 SDK есть недокументированый класс mx.core.UIComponentGlobals. В этом волшебном классе лежит не менее волшебное поле designMode:Boolean.
mx.core.UIComponentGlobals
designMode:Boolean
В Design View среда Flex Builder пытается "выполнить" код и отобразить что-либо, следовательно можно прописать проверку на designMode и делать то, что хотим.
designMode
Итак: 1. Возьмем ActionScript-компонент для Flex Bulder 3. 2. Заоверрайдим метод createChildren():
createChildren()
override protected function createChildren():void { super.createChildren(); if (UIComponentGlobals.designMode) { //здесь мы создаем child-ы, которые будут в design mode } }
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { super.updateDisplayList(unscaledWidth, unscaledHeight); if (UIComponentGlobals.designMode) { //здесь мы рисуем то, что будет видно в design mode }else { //а здесь то, что в runtime } }
Вуаля! Пример компонента можно взять здесь. При добавлении этого компонента на сцену в Design Mode Flex Builder-а мы увидим следующее:
А при запуске — вот это:
Можно скачать пример Flex-приложения и пример компонента.
Как могло получиться, что столь полезный класс остался недокументированным? На сколько мне известно, сейчас у Flex только один плюс перед .NET - возможность наследования ресурсов подобно Delphi. Ввиду такого положения вещей, не делать упор на это вроде бы не очень логично?
Как можно откопать недокументированные классы?
>>Как могло получиться, что столь полезный класс остался недокументированным? Эт к адобу. Или на opensource.adobe.com. Помоему там можно документировать все.
>>Как можно откопать недокументированные классы? Копая исходники фреймворка ;-)
Во Flash CS3, если кому интересно, тоже самое делается через проверку условия: if ((parent != null && getQualifiedClassName(parent) == "fl.livepreview::LivePreviewParent")) {}
Подозреваю, во Flex тоже можно так сделать, только, наверное, класс будет другой.
обязательно ли из компонента компилировать SWC? Если нет то у меня не работает для SDK 3.0
Предыдущий пост
Следующий пост