Flex:名为“result”的dataProvider变量会造成麻烦。为什么?

时间:2011-02-02 16:57:50

标签: flex actionscript adobe

<?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”。为什么呢?

2 个答案:

答案 0 :(得分:5)

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

这很奇怪......如果我们使用Spark List控件,它甚至都不会编译。它告诉我们它无法将Array转换为IListresult显然是某个地方的变量,但在哪里呢?

所以我查看了使用-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,它工作得很好。我假设结果可能是保留的。

罗布