Adobe Flex - отображение визуального элемента из HostComponent в MXML
У меня есть SkinnableComponent:
public class ContentView extends SkinnableComponent
{
[Bindable]
public var titleBar:IVisualElement;
public function ContentView(pContentXML:XML)
{
this.setStyle("skinClass", ContentViewSkin );
}
}
и теперь я хочу отобразить titleBar в файле скина mxml.
<?xml version="1.0" encoding="utf-8"?>
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark">
<fx:Metadata>
[HostComponent("EMM.App2Go.Viewer.Component.ContentView")]
</fx:Metadata>
<s:DataGroup width="100%" >
<s:dataProvider>
<s:ArrayList source="{hostComponent.titleBar}" />
</s:dataProvider>
</s:DataGroup>
как вы можете видеть, я справился с этим с помощью DataGroup, но это немного уродливо, и я думал о более простом способе сделать это, как
<fx:Object source="hostComponent.titleBar" />
или что-то типа того.
Я надеюсь, что вы можете мне помочь.
1 ответ
Решение
Похоже, вы глубоко не понимаете, как должна работать модель Spark SKinning. Вы не должны ссылаться на hostComponent из скина для отображения элементов. Вы должны создать элемент в скине; и использовать то же имя. Так что, если hostComponent имеет часть скина, определенную следующим образом:
[Bindable]
[SkinPart]
public var titleBar:IVisualElement;
кожа должна иметь что-то вроде этого:
<s:DataGroup width="100%" id="titleBar" >
</s:DataGroup>
Я предлагаю прочитать эту информацию о Spark Skinning, а также изучить Component LifeCycle.