使用ItemRenderer从路径输出文件名

时间:2012-12-29 15:47:03

标签: flash flex actionscript

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

查看代码:

<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>

3 个答案:

答案 0 :(得分: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,因此您将继续使用应用程序获得的更复杂的类。

答案 1 :(得分:1)

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

  

super.data = _link.match(filename);

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

答案 2 :(得分:0)

您的渲染器中似乎有一些名为Label的{​​{1}}文本组件,但随后您声明了名为filename的{​​{1}}类型{}的局部变量。

你现在不幸运 - filenameRegExp课程,这意味着你的

RegExp

不会产生错误。但它应该。 尝试将您的本地变量重命名为dynamic

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