0

はい、SOにはこのような質問が何百万もあると確信していますが、これは私を困惑させました. 以下のコード サンプルを確認してください。

<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx"
     creationComplete="init(event)">

<fx:Script>
    <![CDATA[
        import mx.events.FlexEvent;

        [Bindable]
        private var data:Object;

        private function init(e:FlexEvent):void {
            this.data.item = new Array();
        }
    ]]>
</fx:Script>
</s:Group>

オブジェクトitemに配列を作成できないのはなぜですか? クラスは本質的に動的として宣言されているdataと思いましたか? Objectこれが原因で実行時に発生するエラーは次のとおりです。

TypeError: Error #1009: Cannot access a property or method of a null object reference.

誰かがこのオブジェクトに自分のプロパティを作成する方法を理解するのを手伝ってくれませんか. 通常、これは簡単です。笑

お時間をいただきありがとうございます。

4

4 に答える 4

3

問題は、dataインスタンス化されておらず、null であることです。

<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx"
     creationComplete="init(event)">

<fx:Script>
    <![CDATA[
        import mx.events.FlexEvent;

        [Bindable]
        private var data:Object;

        private function init(e:FlexEvent):void {
            this.data = {};
            this.data.item = new Array();
        }
    ]]>
</fx:Script>
</s:Group>
于 2012-07-29T02:08:52.480 に答える
2

さらに良いことに、これを行うことができます:

private function init(e:FlexEvent):void {
    if(this.data == null) 
        this.data = {};
    this.data.item = new Array();
}

そうすれば、init が呼び出されるたびに、データが存在する場合、空のオブジェクトで上書きされることはありません。

于 2012-07-29T05:02:24.517 に答える
2

最初にデータが存在することを確認してください。

private function init(e:FlexEvent):void {
   this.data = {};
   this.data.item = new Array();
}
于 2012-07-29T02:08:32.167 に答える
0

データ型とデータ インスタンスを混同しています。objectすべてのオブジェクトが動的であるとは限りませんが、 すべてのクラスが派生します。

つまり、データが動的でないデータ型の場合、itemプロパティを設定できません。dynamicAS3 のクラスは、キーワードで動的として定義されます。匿名オブジェクトはデフォルトで動的です:

したがって、this.data = {}設定すると、プロパティを設定できるようになりitemます。

于 2012-07-29T02:11:56.547 に答える