<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
private var result : ArrayCollection = new ArrayCollection([1,2,3]);
]]>
</mx:Script>
<mx:List dataProvider="{result}"/>
</mx:Application>
我有这个代码。问题是:如果我的dataProvider变量名为“result”,那么在正在运行的应用程序中,List包含唯一的元素“[object Binding]”。如果我将“结果”重命名为其他任何内容(例如“res”),则列表将按预期显示 - “1”,“2”,“3”。为什么呢?
答案 0 :(得分:5)
简短回答:这是一个错误的错误。我已经报告过了。
这很奇怪......如果我们使用Spark List控件,它甚至都不会编译。它告诉我们它无法将Array
转换为IList
。 result
显然是某个地方的变量,但在哪里呢?
所以我查看了使用-keep-generated-actionscript = true编译器标志生成的代码。
在ViewName-generate.as文件中,您会发现一个有趣的方法:
private function _ViewName_bindingsSetup():Array
{
var result:Array = [];
result[0] = new mx.binding.Binding(this,
function():Object
{
return (result);
},
null,
"_ViewName_List1.dataProvider"
);
return result;
}
这是Binding对象在您的result
变量中的位置。
我们可以在绑定对象中看到有一个返回(result)
的函数。在任何其他情况下,这将是(results)
之类的其他内容。但是,在这种情况下,它返回Binding
个对象的本地数组。这就是this.result
有效的原因。它正在退出当地范围!
所以,这显然是一个错误。我已将其提交给Adobe:https://bugs.adobe.com/jira/browse/FB-29870
答案 1 :(得分:1)
我正在尝试使用Flex中的列表和数组。我试过this.result
,它工作得很好。我假设结果可能是保留的。
罗布