0

Flex 2 アプリを実行すると、次のランタイム エラーが発生します。

TypeError: エラー #1009: No se puede acceder a una propiedad oa un método de una referencia a un objecto nulo.

つまり、Flex SDK は、ItemRenderer 内の「lb」変数が null であることを通知しています (デバッガーで確認したところ、実際には null です)。何が間違っていますか?

エラーを引き起こす行は次のとおりです: lb.text=value.spe_name;

私のタイルリスト:

<mx:TileList variableRowHeight="true" liveScrolling="false" width="100%" textAlign="left"     height="100%" columnCount="2"  dataProvider="{model.specialfield_issue_list}" itemRenderer="org.nevis.cairngorm.mod.view.IRCampoEspecial" direction="horizontal"></mx:TileList>

私の ItemRenderer 簡略化されたソース コード:

<?xml version="1.0"?>
    <mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"
        horizontalAlign="left" verticalAlign="middle"
        verticalGap="0" borderStyle="none" width="100%" height="100%"
     horizontalScrollPolicy="off" verticalScrollPolicy="off" toolTip=""  creationPolicy="all"   
     >

        <mx:Script>
            <![CDATA[
            import mx.controls.TextArea;
            import mx.controls.Text;
            import org.nevis.cairngorm.mod.model.ModelLocator;
            import mx.core.UIComponent;
            import mx.controls.Label;
            import mx.controls.ComboBox;
            import mx.controls.TextInput;
            import utils.Utils;
            import mx.collections.ArrayCollection;
            import mx.controls.Alert;

            [Bindable]
            public var model:ModelLocator=ModelLocator.getInstance();

            [Bindable]
            private var fieldLabelVisible:Boolean = false;

            [Bindable]
            private var textInputVisible:Boolean = false;

            [Bindable]
            private var textAreaVisible:Boolean = false;

            [Bindable]
            private var comboBoxVisible:Boolean = false;

            [Bindable]
            private var mandatoryLabelVisible:Boolean = false;


            public function updata_valor_text(valor:Event):void {
                data.value=valor.currentTarget.text;
            }

            public function updata_valor_combo(valor:Event):void {
                data.value=valor.currentTarget.selectedItem.valuesspecialfieldid
            }

            override public function set data(value:Object):void {
              var i:int;
              var sel:int;

              if (value){   

                super.data = value;

                fieldLabelVisible = true;
                lb.text=value.spe_name;
                lb.toolTip=value.spe_description;
                lb.width=150;  
                lb.name='etiqueta'; 
                lb.styleName='texto-iza';

              } else {
                  fieldLabelVisible = false;
                  textInputVisible = false;
                  textAreaVisible = false;
                  comboBoxVisible = false;
                  mandatoryLabelVisible = false;
              }
            } 

            ]]>
        </mx:Script>

        <mx:Label id="lb" visible="{fieldLabelVisible}" includeInLayout="{fieldLabelVisible}"/> 
        <mx:TextInput id="ti" visible="{textInputVisible}" includeInLayout="{textInputVisible}"/>
        <mx:TextArea id="ta" visible="{textAreaVisible}" includeInLayout="{textAreaVisible}"/>
        <mx:ComboBox id="cb" visible="{comboBoxVisible}" includeInLayout="{comboBoxVisible}"/>
        <mx:Label id="mandatory" visible="{mandatoryLabelVisible}" includeInLayout="{mandatoryLabelVisible}"/>
    </mx:HBox>

よくわかりませんが、使用している SDK は 2.0.1 Hotfix 3 だと思います。

ご協力いただきありがとうございます!

4

1 に答える 1

0

私は解決策に来ました。私のコードでは、mx コンポーネント (Label、TextInput、TextArea など) にアクセスしようとすると、まだ作成されていません。この問題を解決するために、次のように callLater 関数を使用しました。

override public function set data(value:Object):void {
              var i:int;
              var sel:int;

              super.data = value;

              callLater(function onceAllCreated():void{              

              if (value){   

                fieldLabelVisible = true;
                lb.text=value.spe_name;
                lb.toolTip=value.spe_description;
                lb.width=150;  
                lb.name='etiqueta'; 
                lb.styleName='texto-iza';

              } else {
                  fieldLabelVisible = false;
                  textInputVisible = false;
                  textAreaVisible = false;
                  comboBoxVisible = false;
                  mandatoryLabelVisible = false;
              }

              });
            }

これが他の誰かに役立つことを願っています!

于 2012-01-19T15:03:32.947 に答える