Flex:使用ItemRenderer将项添加到DropDownList

时间:2011-03-17 18:01:39

标签: xml flex

我有一个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

1 个答案:

答案 0 :(得分:0)

也许我误解了你要做的事,但你不应该直接调用你的itemRendererFunction。您需要将DropDownList的itemRendererFunction属性设置为renderNode函数,并让DropDownList在需要时调用它。

以下是如何使用itemRendererFunction的基本示例:

http://blog.flexexamples.com/2009/03/19/using-a-custom-item-renderer-function-with-the-fxlist-control-in-flex-gumbo/

干杯!