2013-02-21 4 views
0

У меня есть компонент, и я хочу вызвать его из секции скрипта.вызов компонента из сценария

Таким образом, вместо того, чтобы просто получить его так:

<s:application> 
<script> 
</script 

<ns1:msns includeIn="login" x="482" y="541"> 
    </ns1:msns> 
</s:application> 

Я хочу, чтобы это что-то вроде этого:

<s:application> 
<script> 
protected function mmshakkoutab(event:MouseEvent):void 
      {    
var ns1:msns:component = new component(); 
ns1:msns.x = 5 
ns1:msns.x = 5 
} 
</script 

</s:application> 

даже возможно ли это? Я искал, но все примеры дают мне компонент в месте под сценарием.

ответ

1

Если я правильно понимаю, то да, это возможно. Вы терминология «вызов компонента» нестандартная; но я думаю, что вы хотите создать компонент в ActionScript вместо MXML. Все, что вы можете сделать с MXML, вы можете сделать с помощью ActionScript.

У вас есть правильная идея; и ты почти весь путь туда; есть всего несколько вещей, которые я бы изменил. Во-первых, в ActionScript вы импортируете класс; вы бы не ссылались на пространство имен MXML, концептуально вроде этого:

import com.myPackage.msns; 

В вашем блоке сценария.

При создании компонента вы хотите создать переменную, которая указывает на нее. Это будет соответствовать полю id в MXML. Ваш синтаксис ns1:msns:component, вероятно, вызовет ошибки компилятора. Но вы можете создать компонент, как это:

var msns :component = new component() 

Я здесь упомянуть, что обычно конвенцию прописных букв имен компонентов. Однако ваше использование строчной буквы не является синтаксически неправильным.

Затем установите свойства на компоненте, который вы уже делаете:

msns.x = 5 
msns.x = 5 

И, наконец, - это шаг, который вы не хватает - необходимо добавить новый компонент в контейнер. Вы можете сделать это с помощью addElement, если вы имеете дело с контейнерами Spark или addChild, если вы имеете дело с контейнерами MX. Так, в примере, который вы указали вы родительский контейнер является искрой Application, я буду использовать addElement:

this.addElement(msns); 

Итак, вы блок кода будет переписан так:

protected function mmshakkoutab(event:MouseEvent):void{    
var msns:component = new component(); 
msns.x = 5 
msns.x = 5 
this.addElement(msns); 
} 

Одна вещь, которую вы должны рассмотреть, является Flex Component LifeCycle. Каждый компонент Flex проходит через него; и определенные вещи выполняются в определенном порядке для определенной цели. Для создания детей вам может быть лучше продлить createChildren(), особенно если вы хотите, чтобы компонент был создан как часть первоначальной настройки вашего тега приложения.

1

Чтобы программно создать экземпляр компонента вместо декларативной реализации, используйте addElement(), чтобы добавить компоненты в список отображения.

Например, чтобы добавить визуальный элемент в группу искры с именем container.

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       creationComplete="creationCompleteHandler(event)"> 
    <fx:Script> 
     <![CDATA[ 
      import mx.core.UIComponent; 
      import mx.events.FlexEvent; 

      protected function creationCompleteHandler(event:FlexEvent):void 
      { 
       var component:UIComponent = new UIComponent(); 
       component.x = 5; 
       component.y = 5; 

       container.addElement(component); 
      } 
     ]]> 
    </fx:Script> 

    <s:Group id="container" /> 

</s:Application> 

Внутри блоков сценариев используйте пространства имен пакетов вместо пространств имен MXML.

import com.msns.Component; 

var component:Component = new Component(); 
component.x = 5 
+0

Я должен +1 это несмотря на то, что мы писали наши соответствующие ответы в то же время. :-) – JeffryHouser

+0

Спасибо, ребята, я сначала попробую, когда приеду завтра на работу: D –

0

, если предположим, что ваш компонент ActionScript, т.е. распространяется на спрайт вы можете сделать, как этот

protected function creationCompleteHandler(event:FlexEvent):void 
{ 
    var yourASClassObj:ASClass = new ASClass(); 

    var component:UIComponent = new UIComponent(); 
    this.addElement(component); 

    component.addChild(yourASClassObj); 
} 
Смежные вопросы