Flex:名为"result"的dataProvider变量会造成麻烦.为什么?

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".为什么?

Bri*_*sio 5

简短的回答:这是一个错误的错误.我已经报告过了.

这很奇怪......如果我们使用Spark List控件,它甚至都不会编译.它告诉我们它无法转换ArrayIList. 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