Ошибка выполнения на ItemRenderer в Flex 2 - PullRequest
0 голосов
/ 18 января 2012

Когда я запускаю свое приложение Flex 2, я получаю следующую ошибку во время выполнения:

TypeError: Ошибка # 1009: Нет доступа к серверу puede. метод референции и анонимности.

Другими словами, Flex SDK сообщает мне, что переменная "lb" внутри моего ItemRenderer равна нулю (я проверил с помощью отладчика и да, это действительно пусто) Что я делаю неправильно?

Вот строка, которая вызывает ошибку: 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.

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 19 января 2012

Я пришел к решению. В моем коде происходит следующее: когда я пытаюсь получить доступ к моим компонентам 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;
              }

              });
            }

Надеюсь, это поможет кому-то еще!

...