0

我对 actionscript 很陌生,我收到了一个 XML 文件路径列表。我需要从中提取文件名,所以我设置了一个 itemRenderer,但我没有得到任何名称。我添加了一个断点,我的文件名确实包含正确的文件名,但它从未显示在视图中。我究竟做错了什么?

查看代码:

<s:SkinnableContainer width="100%">
    <s:DataGroup itemRenderer="modules.custFiles.renderers.CustFileItemRenderer" dataProvider="{custFiles}" width="100%">
        <s:layout>
            <s:VerticalLayout gap="0"/>
        </s:layout>
    </s:DataGroup>
</s:SkinnableContainer>

渲染器代码:

override public function set data(value:Object):void
{
    var node:XML = value as XML;
    _link = node.toString();
    var filename:RegExp = /[^\/\/]*$/ig;
    filename.text = _link.match(filename);

    super.data = value;
}

XML:

<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://mysite.com/srv">
<string>
http://mysite.com/files/custFiles/custfile-1.pdf
</string>
<string>
http://mysite.com/files/custFiles/custfile-2.pdf
</string>
</ArrayOfString>
4

3 回答 3

1

在这种情况下,您不需要自定义渲染器。只需将数据转换为字符串的 IList:

function toListOfString(xml:XML):IList {
  if (!xml) return new ArrayCollection();

  const children:XMLList = xml.children(),
        source:Array = [];

  for each(var child:XML in children) source.push(child.text())

  return new ArrayCollection(source);
}

获取结果并将方法的结果分配给列表。这将帮助您入门,并向您展示如何区分 Flex 开发带来的单个问题。

我为什么要这样提议?XML/XMLList 实例并不是在 Flex 中处理数据的最佳匹配。这些类不支持 DataBinding,因此您将继续使用应用程序变得更复杂的类。

于 2012-12-29T16:42:47.240 回答
1

将“设置数据”函数中的行更改为:

super.data = _link.match(文件名);

您没有在父类中设置正确的值。

于 2012-12-29T17:55:27.463 回答
0

似乎您的渲染器中有一些文本组件Label,例如 name filename,但随后您声明了 namefilename为 type 的局部变量RegExp

而你现在并不幸运 -RegExpdynamic阶级,这意味着你的

filename.text = _link.match(filename);

不会产生错误。但它应该。尝试将局部变量重命名为fileNameRegExp.

顺便说一句,@ethrbunny 已经提到了这个事实,所以我想你应该给@ethrbunny '接受'。

于 2012-12-29T16:39:36.410 回答