Есть ли способ действительно расширить компонент Flex? - PullRequest
0 голосов
/ 23 июля 2010

Мне нужно создать расширение компонента Flex, что (очевидно) означает, что новый компонент должен использоваться при каждом использовании родительского элемента. Но я не вижу способа сделать это, Flex предлагает два способа расширения компонента, определяя класс AS, расширяющий родительский, или создавая файл MXML, который использует родительский компонент в качестве корневого элемента; в обоих случаях я не могу использовать вложенные элементы для настройки дочернего элемента, как для родительского.

E. G.

package components {
import mx.controls.AdvancedDataGrid;

public class FixedDataGrid extends AdvancedDataGrid {
    public function FixedDataGrid() {
        super();
    }
}
}

Это действительный MXML

 <mx:AdvancedDataGrid>

...

    <mx:columns>

...

Это НЕ действительно MXML

<mx:FixedDataGrid>
...
<mx:columns>
...

Это не похоже на действительное is-a отношение.

Ответы [ 2 ]

3 голосов
/ 23 июля 2010

Ваш FixedDataGrid не существует в том же пространстве имен, что и компоненты mx ...

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

<mx:Application xmlns:components="components.*" ... >
<components:FixedDataGrid>
    ....

Вы делаете mxml-эквивалент объявления вашего компонента в пакете компонентов, а затем жалуетесь, что не можете ссылаться на него как mx.controls.FixedDataGrid

1 голос
/ 23 июля 2010

При определении свойств с помощью нового MXMLtag свойство должно быть указано в том же пространстве имен, что и тег.

Так что вы можете сделать что-то вроде этого:

<myComp:FixedDataGrid columns="SomeArray">

Без проблем. Если вы используете синтаксис тега MXML для определения свойства массива столбцов, вам необходимо сделать следующее:

<myComp:FixedDataGrid >
 <myComp:columns>
  <mx:AdvancedDataGridColumn />
  <mx:AdvancedDataGridColumn />
 </myComp:columns>
</myComp:FixedDataGrid >

столбцы - это свойство в AdvancedDataGrid, и поэтому оно должно быть определено в том же пространстве имен, что и пользовательское расширение для AdvancedDataGrid. AdvancedDataGridColumn - это другой компонент, поэтому он будет определен в пространстве имен mx.

Как упомянул альтернативный автор, пространство имен 'myComp' должно быть определено в компоненте верхнего уровня вашего приложения. В большинстве случаев Flash Builder автоматически добавляет пространство имен для вас.

...