0

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

谢谢!

4

3 回答 3

1

将声明更改为:

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

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

于 2012-11-19T17:48:52.390 回答
1

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

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

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

于 2012-11-19T22:02:10.397 回答
1

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

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

_layoutTemplatesXML.PaperSizeTemplates as XMLListCollection

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

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

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

于 2012-11-19T23:36:33.957 回答