为什么这个ActionScript程序不起作用?

时间:2011-09-26 20:42:28

标签: arrays flash actionscript-3 flex flex4

它显示错误:

1120: Access of undefined property myArray. DataGrid.mxml /DataGrid/src line 10

源代码:

 <?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600">
    <mx:Script>
        <![CDATA[

            import mx.collections.ArrayCollection;

            [Bindable]
            public var myArray:Array = new Array();
            myArray[0] = "Tom"; // string

            [Bindable]
            public var arrColl:ArrayCollection = new ArrayCollection(myArray);

        ]]>
    </mx:Script>

    <mx:AdvancedDataGrid id="ad"
                         columns="{myArray}"
                         dataProvider="{arrColl}"/>
</mx:Application>

有什么问题?

2 个答案:

答案 0 :(得分:0)

除非你确切知道自己在做什么,否则不应该直接在脚本块中编写任意代码。相反,你应该这样做:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
                initialize="initialize()">
  <mx:Script>
    <![CDATA[
      import mx.collections.ArrayCollection;

      [Bindable]
      public var myArray:Array = new Array();

      [Bindable]
      public var arrColl:ArrayCollection;

      private function initialize() : void
      {
        myArray[0] = "Tom";
        arrColl = new ArrayCollection(myArray)
      }
    ]]>
  </mx:Script>
  <mx:AdvancedDataGrid columns="{myArray}" dataProvider="{arrColl}"/>
</mx:Application>

此代码的另一个问题是myArray[0] = "Tom"不会导致数据网格更新。为此,您必须自己分配变量myArray(例如myArray = ["Tom"])。

答案 1 :(得分:0)

您无法在类定义中开始为数组赋值。您需要在方法中移动myArray[0] = "Tom";行。如果您希望它在初始化时发生,请在Application标记creationComplete="yourEventHandler"中指定一个事件处理程序,并将该行放在yourEventHandler()中。希望有所帮助,如果您需要更多代码,请告诉我们。)