Как вызвать некоторую функцию mxml из класса? - PullRequest
0 голосов
/ 11 января 2011

У меня есть 2 файла: Main.mxml с приложением и один MyObject.as. Я создаю экземпляр MyObject в mxml и могу вызывать каждую его публичную функцию из mxml. Но что если по какой-то причине мне нужно вызвать функцию, объявленную в mxml из класса MyObject? Как это сделать? Я думал, что мог бы передать ссылку на класс main.mxml в этот объект, но я не мог выяснить, какой именно это класс (верно, он наследует Application, но какой именно класс?)

Спасибо

Ответы [ 2 ]

3 голосов
/ 11 января 2011

Он имеет тип Main (принимает имя файла mxml). Вы можете добавить к ней статическую переменную и метод получения:

private static var _instance : Main;

public static function get instance () : Main {
    return _instance;
}

Затем пусть экземпляр ссылается на this после завершения приложения:

private function applicationCompleteHandler():void
{
    _instance = this;
}

Не забудьте установить applicationComplete="applicationCompleteHandler" в своем теге <mx:Application>. После этого вы можете вызвать Main.instance из любой точки вашей программы, чтобы получить доступ к методам и переменным.

0 голосов
/ 11 января 2011

Если вы создаете экземпляр класса MyObject в своем файле Main.mxml, вы также можете получить доступ к методу в Main, передав метод как функцию в объект.

Предположим, вы имеете в Main.mxmlфункция:

private function doSomething():*{
  ...
}

С соответствующим установщиком в MyObject.as:

private var _mainFunction:Function;

public function set mainFunction(f:Function):void
{
    _mainFunction = f;
}

Затем вы можете передать метод при создании экземпляра класса MyObject в mxml:

<*:MyObject mainFunction='doSomething'/>

И теперь вы просто вызываете _mainFunction в коде MyObject.as всякий раз, когда вам это нужно.

Конечно, предложение Велтраумпирата будет более эффективным, если вам потребуется доступ к более чем одному методу и /или переменная в вашем приложении.

...