Доступ к объектам в файле пользовательских компонентов в flex - PullRequest
1 голос
/ 18 сентября 2011

Я довольно новичок, особенно в части mxml.Для меня есть некоторые запутанные вещи.
Например, у меня есть файл пользовательского компонента Abc.mxml с кодом:

<s:Group>
   //Lots of code
   <s:Button id="someId" /*code*/ />
</s:Group>

А затем у меня есть Xyz.mxml, который также является файлом пользовательского компонента.

<s:Group>
  <fx:Scrip>
     //something happens here, for example some other button click or whatever
  </fx:Script>
  //code
  <comp:Abc />
</s:Group> 

Итак, вопрос в том, как мне получить доступ к свойствам этой кнопки.Я хочу, чтобы когда что-то происходило в файле Xyz, видимость кнопки (someId) становилась ложной.Если бы Abc.mxml был файлом класса AS, тогда было бы легко, просто создать объект и т. Д., Но как его получить, если это mxml-файл, я понятия не имею.

1 Ответ

1 голос
/ 18 сентября 2011

Нет большой разницы между mxml и as. Когда вы пишете Xyz.mxml:

<s:Group>
  <fx:Scrip>
     //something happens here, for example some other button click or whatever
  </fx:Script>
  //code
  <comp:Abc />
</s:Group>

... вы просто указываете класс Xyz, производный от Group. Mxml - это просто язык разметки, который облегчает создание интерфейсов. Во время компиляции mxml файлы преобразуются в чистый AS, поэтому в mxml вы ничего не можете сделать (в больших масштабах), чего не можете сделать в AS и наоборот.

Свойство ID в mxml аналогично имени экземпляра в AS, т. Е. Оно будет преобразовано в общедоступное свойство в вашем запросе.

Ответ на ваш вопрос.

Вы можете написать публичную функцию в Abc и вызвать ее в Xyz.

Abc.mxml:

<s:Group>
    <fx:Script>
        <![CDATA[
            public function doSomething():void
            {
                someId.enabled = false;
            }
        ]]>
    </fx:Script>
   <s:Button id="someId"/>
</s:Group>

Xyz.mxml:

<s:Group>
  <fx:Script>
      <![CDATA[
         private function somethingHappened():void
         {
             abcComponent.doSomething();
         }
      ]]>
  </fx:Script>
  //code
  <comp:Abc id="abcComponent"/>
</s:Group>

В функции somethingHappened вы можете напрямую обращаться к кнопке abcComponent.someId, но я настоятельно рекомендую этого не делать, поскольку она нарушает инкапсуляцию и делает ваши классы более связными (и т. Д.).

...