вызов метода установки mxml в пользовательском компоненте из Actionscript - PullRequest
1 голос
/ 04 февраля 2009

я пытаюсь вызвать метод установки в некотором блоке actionscript моего пользовательского компонента из класса actionscript.

Я могу сделать это нормально, когда это основное приложение, которое я хочу вызвать с помощью;

Application.application.methodName();

однако, как я могу вызвать метод из пользовательского компонента? Мой компонент находится в моем пакете компонентов, и я пробую следующее

components.customComponent.methodName()

однако этого не происходит, есть идеи?


экземпляр моего пользовательского компонента вызывает класс actionscript, поэтому я не хочу снова создавать экземпляр пользовательского класса внутри ActionScript, я просто хочу вызвать метод setter ...

есть еще идеи?

Ответы [ 3 ]

2 голосов
/ 04 февраля 2009

Вам не нужно делать метод статичным; это, скорее всего, бесполезно, поскольку вы хотите, чтобы вызов метода что-то делал с текущим состоянием компонента, я полагаю - используйте некоторые из его данных, измените его внешний вид и т. д. Что вам действительно нужно, так это ссылка на объект .

Поскольку Application.application находится в верхней части (или на самом деле очень близко к вершине) легендарного списка отображения, вы должны иметь доступ к каждому компоненту, начиная с этой точки, а затем проходя через список отображения * 1004. * - до тех пор, пока, в конце концов, по достижении вашего вложенного компонента не вызовет его публично определенный метод.

Однако я должен сказать (со всем большим уважением!), Что вы рискуете попасть в опасные ОО воды здесь. :) Правильный способ сделать это - найти способ передать ссылку на ваш пользовательский компонент классу ActionScript, который требует к нему доступ - например, в вашем MXML:

<mx:Script>
    <![CDATA[

        private function this_creationComplete(event:Event):void
        {
            var yourObject:YourClass = new YourClass(yourCustomComponent);
        }

    ]]>
</mx:Script>

<components:YourCustomComponent id="yourCustomComponent" />

... а затем в вашем классе ActionScript:

public class YourClass
{
    private var componentReference:YourCustomComponent;

    public function YourClass(component:YourCustomComponent)
    {
        this.componentReference = componentReference;
    }

    private function yourMethod():void
    {
        this.componentReference.someMethodDefinedInYourComponent();
    }
}

Такой подход, вероятно, послужит вам лучше. Имеет ли это смысл? Я буду следить за нашими комментариями; отправьте обратно, и я сделаю все возможное, чтобы помочь вам в этом.

0 голосов
/ 04 февраля 2009

Вы должны убедиться, что у вас есть ссылка на экземпляр этого компонента, откуда вы пытаетесь вызвать его. Итак, в приведенном ниже примере вы можете видеть, что я создал экземпляр B внутри конструктора класса A. Так что теперь у меня есть экземпляр B. Теперь из этого экземпляра я могу вызвать b.someMethod ()

public class A
{
   public function A()
   {
      var b : B = new B();
      b.someMethod();
   }
}

public class B
{
   public function B()
   {
   }

   public function someMethod() : void
   {

   }
}

Вы можете думать о классе A как о своем Application.mxml, а о классе b - как о своем пользовательском компоненте. Поэтому, где бы вы ни пытались назвать его, вам нужно убедиться, что ваш компонент создан.

0 голосов
/ 04 февраля 2009

Ссылка на компонент таким образом требует, чтобы метод был статическим.

Если вы хотите вызвать метод для экземпляра компонента, присвойте ему идентификатор и вызовите его из представления, в котором вы определили этот компонент.

<!-- component declaration -->
<comps:MyComponent id="myComp"/>

// inside a script block
myComp.mySetter(someObj)

Кстати, «метод установки» в ActionScript - это метод, который определяется с использованием следующего синтаксиса:

public function set myProperty(varName : String) : void { ... }

И его можно вызывать так же, как вы устанавливаете значение свойства:

myComp.mySetter = myObj;

Во многих других языках «метод установки» такой же, как и любой другой метод, за исключением соглашения об именах. Стоит понимать, что настоящий метод установки в AS3 отличается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...