проблемы с передачей переменных от родителя к потомку. AS3

#flash #actionscript-3 #actionscript

#flash #actionscript-3 #actionscript

Вопрос:

Я пытаюсь получить доступ к некоторым переменным от моего родителя в моем дочернем MC.

Родительский код:

 var data_history:String;    
function finish_checkUp(event:Event):void{          
        var checkUp_stat:String;
        checkUp_stat = data.check_UP_STAT;
        if (checkUp_stat == "PASSED"){
            data_history = "FALSE";
            gotoAndPlay ("domain_check");
        }
        else if (checkUp_stat == "FAILED"){
            data_history = "TRUE";
            gotoAndPlay ("error_data_conflict");
        }
        else if (checkUp_stat == "FAILED_UN"){
            data_history = "TRUE";
            gotoAndPlay ("");
        }   
}
  

ДОЧЕРНИЙ MC:

  contt_btn.addEventListener(MouseEvent.MOUSE_DOWN, mouseClick);
    contt_btn.addEventListener(MouseEvent.ROLL_OVER,contt_btnOver);
    contt_btn.addEventListener(MouseEvent.ROLL_OUT,contt_btnOut);
    function contt_btnOver(event:MouseEvent):void{
        contt_btn.gotoAndPlay("over");
    }
    function contt_btnOut(event:MouseEvent):void{
        contt_btn.gotoAndPlay("out");
    }
    function mouseClick(event:MouseEvent):void
    {
        trace (MovieClip(this.parent).data_history);
        if (data_history == "TRUE"){
    MovieClip(parent).gotoAndPlay("begin_erasing");
        }
        else if (data_history == "FALSE"){
            gotoAndPlay("");}
    }
  

Теперь, как вы можете видеть, я попробовал этот trace метод, но безуспешно. Flash не сообщает о каких-либо ошибках, касающихся trace метода, но сообщает о двух неопределенных переменных ( data_history ). Я попытался использовать метод трассировки над всеми функциями, в верхней части скрипта, но все те же ошибки.

есть идеи?

Ответ №1:

В трассировке вы ссылаетесь на свойство data_history через this.parent . Предполагая, что это отслеживает ваше значение, вам нужно настроить if …else, чтобы ссылаться на свойство также через parent:

 function mouseClick(event:MouseEvent):void
{
    trace (MovieClip(this.parent).data_history);
    if (MovieClip(this.parent).data_history == "TRUE"){
MovieClip(parent).gotoAndPlay("begin_erasing");
    }
    else if (MovieClip(this.parent).data_history == "FALSE"){
        gotoAndPlay("");}
}
  

Если трассировка, которая у вас есть, выдает ошибку, значит, свойство никогда не существовало для родительского элемента.

Ответ №2:

Дочерний фильм не должен проверять своего родителя таким образом.

Попробуйте это:

в дочернем классе document:

 public var data_history:String;
function mouseClick(event:MouseEvent):void{
           if (data_history == "TRUE"){
                  MovieClip(parent).gotoAndPlay("begin_erasing");
           }
           else if (data_history == "FALSE"){
                   gotoAndPlay("");}
           }
 }
  

в родительском

 function finish_checkUp(event:Event):void{ 
          var checkUp_stat:String;
          checkUp_stat = data.check_UP_STAT;
          if (checkUp_stat == "PASSED"){
              data_history = "FALSE";
              if (childMC as ChildDocumentClass) {
                  (childMC as ChildDocumentClass).data_history = data_history;
              }
              gotoAndPlay ("domain_check");
          }
          else if (checkUp_stat == "FAILED"){
              data_history = "TRUE";
              if (childMC as ChildDocumentClass) {
                  (childMC as ChildDocumentClass).data_history = data_history;
              }
              gotoAndPlay ("error_data_conflict");
          }
          else if (checkUp_stat == "FAILED_UN"){
              data_history = "TRUE";
              if (childMC as ChildDocumentClass) {
                  (childMC as ChildDocumentClass).data_history = data_history;
              }
              gotoAndPlay ("");
          }
  }