【问题标题】:Flex - How to bind XML children attribute values to dataProvider property of a DropDownList?Flex - 如何将 XML 子属性值绑定到 DropDownList 的 dataProvider 属性?
【发布时间】:2012-11-04 12:23:20
【问题描述】:

这是我的 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 的正确方法。

谢谢!

【问题讨论】:

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


    【解决方案1】:

    其他答案有点对标,但不起作用。请注意,@Mike Petty 关于将您的 e4x 语句中的大小写与 XML 中使用的大小写匹配的评论是问题的一部分。

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

    _layoutTemplatesXML.PaperSizeTemplates as XMLListCollection
    

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

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

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

    【讨论】:

    • 这非常有效!感谢您解释区分大小写的重要性。
    【解决方案2】:

    将声明更改为:

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

    您可能必须使用“dataprovider”标签将 XML 单独指定为 XMLListCollection。由于您没有展示如何提供 XML,我只能推测。

    【讨论】:

      【解决方案3】:

      使用 E4X 声明时需要考虑的几点:

      • 所有内容都区分大小写,因此如果您要查找 PaperSizeTemplates 节点,则必须准确引用它。如果你的根节点声明被赋值给一个变量即:var myXML = ... 那么你所引用的XMLList就是myXML.PaperSizeTemplates
      • 在您的特定情况下,您实际上是在寻找节点的属性 - 属性使用 @ 符号,因此您引用的是 myXML.PaperSizeTemplates.@PaperSize。

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

      【讨论】:

        猜你喜欢
        • 2015-05-08
        • 1970-01-01
        • 2011-06-06
        • 1970-01-01
        • 2018-07-24
        • 1970-01-01
        • 2017-08-08
        • 1970-01-01
        • 2022-01-01
        相关资源
        最近更新 更多