Tim*_*dik 2 apache-flex adobe actionscript
<?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>
Run Code Online (Sandbox Code Playgroud)
我有这个代码.问题是:如果我的dataProvider变量名为"result",那么在正在运行的应用程序中,List包含唯一的元素"[object Binding]".如果我将"结果"重命名为其他任何内容(例如"res"),则列表将按预期显示 - "1","2","3".为什么?
简短的回答:这是一个错误的错误.我已经报告过了.
这很奇怪......如果我们使用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;
}
Run Code Online (Sandbox Code Playgroud)
这是Binding对象在您的result变量中的位置.
我们可以在绑定对象中看到有一个返回的函数(result).在任何其他情况下,这将是其他类似的东西(results).但是,在这种情况下,它返回本地Binding对象数组.这就是为什么this.result有效.它正在退出当地范围!
所以,这显然是一个错误.我已将其提交给Adobe:https://bugs.adobe.com/jira/browse/FB-29870