PDA

Просмотр полной версии : как отправить сообщение в mx:Script ?


darksranger
24.10.2008, 07:15
все просто !!! разобрался

итак, чтобы управлять контролами из классов потомков, достаточно в классе потомке, создать публично статичную переменную, типизировав ее, как нужный нам контрол и из mxml приложения, передать ссылку, на нужный обьект и уже в классе управлять контролом
вот пример

это тело нашего mxml приложения, возмем в пример контрол Text, итак

<mx:Script>

import samePackage.MyClass


...

private function sameMetod():void {

MyClass.Text = Text

}


</mx:Script>


<mx:Text x="357.5" y="78" width="189" id="sameText"/>




далее тело class'a


package samePackage.MyClass
{
// не забываем про импорт
import mx.controls.Text;
....
public static var sameText:Text

private function sameFunction():void{

sameText.text = "hell world" - собственон мы имеим все свойства компонента, расположенного в mxml )))))

}







ну, а теперь не сложными телодвижениями, отправляем сообщение в наш mxml, передав в класс таким же путем "this", мы сможем передать сообщение как обычно ( у нас же будет ссылка на родителя :)


PS надеюсь кому то пригодится )))) и выслушал бы, с удовольствием мысли, по поводу такого метода передачи :)


UPD

чем черевато такое действо


в классе делаю public static var sameFunc:Function

далее в теле класса

передаю в sameFunc адрес метода

и в mxml приложении читаю таким способом

sameClass.sameFunc()

собственно, все работает, но вопрос чем это черевато ? и вобще, плохо так поступать ? может лучше будет, отправить сообщение ?
ведь метод то мы не определяем, как static но обращаемся с ним как со static, через ссылку


размышляю дальше :)
так как mxml приложение не наследуется от eventa, то получается и разослать мы не кому не можем ? или можем ?

вобщем как поступить ?

etc
24.10.2008, 12:50
А передать ссылку на всю mxml-форму в какой-нибудь контроллер не судьба?

darksranger
24.10.2008, 13:16
судьба только подскажите как :)

и вобще что насчет "UPD" ?

wvxvw
25.10.2008, 02:53
Это работает вообще не так... MXML компонент конвертируется компайлером в АС класс приблизительно следующим образом: то, что объявлено в mx:Script становиться методами / свойствами этого класса, свойства прописаные в атрибутах компонента инициализируются во время выполнения конструктора этого сгенеренного класса. АС класс, который MXML компонент "оборачивает" не создается вообще никогда. Т.е. его конструктор вызывается только как super() по отношению к MXML компоненту, но никогда не самостоятельно.
Почитай про life cycle компонентов, и особенно про то, как они создаются в рантайме.
Т.е. по большому счету, это мартышкин труд и никому не нужно получать описание того, что объявлено внутри MXML компонента в его суперклассе. Точно так же, как в Sprite не нужен gotoAndPlay().

darksranger
25.10.2008, 03:47
ну про первую половину поста я так и подумал ))))

а вот про life cycle на досуге прочитаю спасибо :)

да вот просто понадобилось, создать компонент визуально, а управлять им из класса, вот и прудмал танцы с бубном, по сути все работает :) поэтому и отписался, может у кого такая же не обходимость будет