我对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>
答案 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}}类型{}的局部变量。
你现在不幸运 - filename
是RegExp
课程,这意味着你的
RegExp
不会产生错误。但它应该。
尝试将您的本地变量重命名为dynamic
。
顺便说一下,@ etrbunny已经提到了这个事实,所以我猜你应该给@ethrbunny'接受'。