我有一个XML结构,如:
<Main>
<Category1>
<Data Name="Data1">
<Item>
<Name>foo</Name>
<Info>bar</Info>
</Item>
<Item>
<Name>baz</Name>
<Info>FOO</Info>
</Item>
</Data>
<Data Name="Data2">
</Data>
</Category1>
<Category2>
</Category2>
</Main>
我使用自定义 DropDownList 来使用ItemRendererFunction填充它:
<s:Label text="{data.attribute('Name')}" top="3" left="10" right="10" bottom="3" color="0xFF00FF" />
如果它具有属性'Name',则为常规Label。
渲染功能是:
public function renderNode(item:*):IFactory
{
if (item.attribute('Name') != null)
return new ClassFactory(SpecialItemRenderer);
else
return new ClassFactory(RegularItemRenderer);
}
但是,我以dataProvider的形式指定XML,如dProv.child('Category1'),因此我只获得<Data>
中的2 renderNode()
个节点。但我也希望同时填充<Item>
个节点。
我尝试过使用新的itemRendererFunction newFunc(item:*):void
循环:
var nodes:XMLNode = item.children();
while(nodes)
{
this.renderNode(nodes);
nodes = nodes.nextSibling;
}
但由于newFunc()
不会返回任何内容而出现运行时错误。
然后我通过动态创建renderNode()
项目对原始mx:Label
进行了更改。通过this
将其添加到this.addElement(newLabel)
,但这不会将标签放在下拉列表中,而是放在控件之上。
所以我想知道有什么办法可以在解析原始XML数据时动态添加这些Items / label吗?
的问候,
Nisheeth Barthwal
答案 0 :(得分:0)
也许我误解了你要做的事,但你不应该直接调用你的itemRendererFunction。您需要将DropDownList的itemRendererFunction属性设置为renderNode函数,并让DropDownList在需要时调用它。
以下是如何使用itemRendererFunction的基本示例:
干杯!