我现在很困,所以这只是我想要的一个例子(显然这段代码错了):
<?xml version="1.0" encoding="utf-8"?>
<s:Application
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Declarations>
<s:ArrayCollection id="dp">
<fx:Object label="Just a label" text="Bla bla bla..."/>
<fx:Object label="Just a label" text="Bla bla bla..."/>
<fx:Object label="Just a label" text="Bla bla bla..."/>
</s:ArrayCollection>
</fx:Declarations>
<s:ButtonBar dataProvider="{tabs}" />
<mx:ViewStack id="tabs" resizeToContent="true">
<s:DataGroup dataProvider="{dp}">
<s:NavigatorContent label="{data.label}">
<s:Label text="{data.text}"/>
</s:NavigatorContent>
</s:DataGroup>
</mx:ViewStack>
</s:Application>
我该怎么办? (NavigationContent将是itemRenderer,ButtonBar非常重要。)
答案 0 :(得分:0)
您无法直接将数据组放在ViewStack
内......项目需要实施INavigatiorContent
。
所以,这是我能想到的最好的。它肯定不会处理ArrayCollection
的更新或更高级的更新,但它是一个开始。
<s:VGroup>
<s:ButtonBar dataProvider="{tabs}" />
<mx:ViewStack id="tabs" resizeToContent="true" >
<mx:addedToStage>
<![CDATA[
for(var i:int = 0; i < dp.length; i++) {
var label:Label = new Label();
label.text = dp.getItemAt(i).text;
var context:NavigatorContent = new NavigatorContent();
context.label = dp.getItemAt(i).label;
context.addElement(label);
tabs.addChild(context);
}
]]>
</mx:addedToStage>
</mx:ViewStack>
</s:VGroup>
如果我真的要做到这一点,我会创建一个派生自ViewStack
的新类,其中包含dataProvider
属性。在内部,我会听取集合上的更改,以便添加/删除项目。此类还包含itemRenderer
属性,以便您可以定义选项卡的外观。
问题在于,通常使用制表符,您可以获得与数据一致的特定视图。您可能希望包含itemRendererFunction
来为您进行映射。
它会变得混乱和漏洞......但你可以实现它。