Flex - 如何将XML子属性值绑定到DropDownList的dataProvider属性?

时间:2012-11-15 20:11:10

标签: xml flex data-binding flex-spark dataprovider

以下是我的XML文档示例XML,其中包含有关打印模板的元数据:

<TemplateList>
    <PaperSizeTemplates PaperSize="8.5x14">
        <Template>Letter ANSI A Landscape</Template>
        <Template>Letter ANSI A Portrait</Template>
    </PaperSizeTemplates>
    <PaperSizeTemplates PaperSize="A3_11.5x16">
        <Template>A3 Landscape</Template>
        <Template>A3 Portrait</Template>
    </PaperSizeTemplates>
    <PaperSizeTemplates PaperSize="A4_8.5x11">
        <Template>A4 Portrait Custom</Template>
        <Template>A4 Portrait Custom1</Template>
        <Template>A4 Portrait Custom2</Template>
    </PaperSizeTemplates>
</TemplateList>

我有一个spark DropDownList ,我要设置其dataProvider,以便所有PaperSizeTemplates元素的PaperSize属性值显示在DropDownList中。

例如,对于上面显示的XML,我希望我的DropDownList显示以下内容:

8.5x14
A3_11.5x16
A4_8.5x11

我尝试了以下内容:

<s:DropDownList id="paperSizeDDL" dataProvider="{_layoutTemplatesXML.paperSizeTemplates.paperSize as XMLListCollection}" />

但下拉列表中没有任何内容。

非常感谢您的帮助。

请使用数据绑定和我的示例XML提供正确的方法。

谢谢!

3 个答案:

答案 0 :(得分:1)

将声明更改为:

<s:DropDownList id="paperSizeDDL" dataProvider="{_layoutTemplatesXML.paperSizeTemplates as XMLListCollection}" labelField="@PaperSize" />

您可能必须使用'dataprovider'标记分别将XML指定为XMLListCollection。由于您没有展示如何提供XML,我只能推测。

答案 1 :(得分:1)

使用E4X声明时需要考虑的几件事情:

  • 一切都区分大小写,因此如果您正在寻找PaperSizeTemplates节点,则必须完全引用它。如果您将根节点声明分配给变量ie:var myXML = ...那么您对XMLList的引用是myXML.PaperSizeTemplates
  • 在您的特定情况下,您实际上是在寻找节点的属性 - 属性使用@符号,因此您的引用是myXML.PaperSizeTemplates。@ PaperSize。

这里有一个关于XML-based数据结构的部分,可以作为参考帮助。

答案 2 :(得分:1)

其他答案有点落在标记上,但不起作用。请注意,@ Mike Petty关于将e4x语句中的案例与XML中使用的案例进行匹配的评论是问题的一部分。

但是,另一个问题是e4x语句返回XMLList个对象。他们没有返回XMLListCollection。所以这个表达式的计算结果为null:

_layoutTemplatesXML.PaperSizeTemplates as XMLListCollection

相反,请为下拉列表设置数据提供程序,如下所示:

<s:DropDownList dataProvider="{new XMLListCollection(_layoutTemplatesXML.PaperSizeTemplates.@PaperSize)}"/>

这将使用3个XML对象填充下拉列表,其值为每个大小的字符串。