Как использовать класс AS3 в MXML?

Как мне использовать следующий класс AS3 в MXML?

Класс AS3:

package mtm 
{
  import flash.display.MovieClip;
  import flash.display.Shape;

  public class TestClass extends MovieClip
  {

      public function TestClass() 
      {
          var s:Shape = new Shape();
          s.graphics.beginFill(0x000000, 1);
          s.graphics.drawRect(0, 0, 60, 60);
          s.graphics.endFill();
          addChild(s);
      } 
  }
}

Документ MXML:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
        <mx:Panel width="75%" height="75%" paddingTop="10" paddingLeft="10">

    </mx:Panel>
</mx:Application>

Нужно ли мне объявить собственное пространство имен? Я предполагаю, что можно сделать что-то вроде:

//Where 'mtm' is my own namespace
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:mtm="com.mtm.*"></mx:Application>

А потом сделать что-то подобное?

<mtm:TestClass></mtm:TestClass>

Я новичок в Flex и MXML, но не в AS3. Спасибо!


person Mike Moore    schedule 10.06.2010    source источник


Ответы (2)


Да, вы правильно поняли. Ваш настраиваемый xmlns - это относительный URL-адрес, указывающий на классы настраиваемых компонентов, поэтому, если TestClass находится в папке с именем Components, вы должны поместить xmlns:mtm="components.*". Ваш MXML правильный.

Вот соответствующая ссылка LiveDocs. Это хорошее место для поиска информации о MXML / AS3: http://livedocs.adobe.com/flex/3/html/help.html?content=intro_3.html

person Dan M    schedule 10.06.2010
comment
Спасибо! Я добавлял com в пространство имен, когда нет каталога com. Ваш конкретный пример помог решить проблему. И спасибо за ссылку! - person Mike Moore; 10.06.2010

Мне кажется, на ваш вопрос уже есть ответ.

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

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

У вас есть конкретная проблема? Поскольку ваш пользовательский компонент не расширяет UIComponent; Я подозреваю, что вы можете столкнуться с некоторыми странностями; поскольку ваш компонент не будет иметь таких методов LifeCycle Flex Component, таких как createChildren (), commitProperties () и updateDisplayList (), которые, вероятно, запутают классы менеджера Flex.

person JeffryHouser    schedule 10.06.2010
comment
Спасибо, я не знал о UIComponent. - person Mike Moore; 10.06.2010