Почему у mx: states возникают проблемы с разрешением реализации компонента? - PullRequest
4 голосов
/ 15 декабря 2008

Время от времени я получаю сообщение об ошибке при настройке состояний в файле MXML. Полученная ошибка говорит о том, что mx: состояния не могут быть разрешены для реализации компонента.

Я прочитал по следующему адресу, что эта проблема вызвана расширением компонентов, что каким-то образом лишает возможности компилятора разрешать состояния mx :. Я не понимаю, почему это так, но у меня нет собственного ответа. Я также не могу заставить этот подход работать со всеми моими расширенными компонентами.

http://life.neophi.com/danielr/2007/01/could_not_resolve_to_a_compone.html

Обходной путь, который я нашел, - не использовать пространство имен. Итак, мой код выглядит так:

<states>...</states>

вместо:

<mx:states>...</mx:states>

Создание этого незнакомца (по крайней мере, для меня) является фактом, что у детей тега - - нет этой проблемы. mx: состояния не могут быть разрешены, но его дочерний элемент mx: State может. И mx: SetProperty - потомок mx: State - также разрешен.

Может кто-нибудь объяснить это и / или предложить лучшее решение проблемы, чем я придумал?

Кстати, я вижу ту же проблему с mx: transitions.

Ответы [ 2 ]

17 голосов
/ 15 декабря 2008

Если у вас есть пользовательский компонент, он, вероятно, будет находиться в пространстве имен, отличном от mx . Вы на правильном пути, удалив пространство имен, но вам не нужно этого делать. Рассмотрим следующий пример

<example:MyComponent xmlns:mx="http://www.adobe.com/2006/mxml"
    xmlns:example="com.example.*">
</example:MyComponent>

В этом коде у нас есть собственный компонент с именем MyComponent в пакете com.example. Теперь, как мы можем добавить пользовательские состояния? Это просто!

<example:MyComponent xmlns:mx="http://www.adobe.com/2006/mxml"
    xmlns:example="com.example.*">

    <example:states>
        <mx:State name="CustomState">
        </mx:State>
    </example:states>

</example:MyComponent>

Свойства компонента, такие как состояния , переходы или даже метка на кнопке, могут быть созданы как дочерние элементы. Эти свойства должны использовать то же пространство имен, что и экземпляр компонента. Неважно, откуда берется имущество в цепочке наследования. Даже если com.example.MyComponent расширяет mx.containers.Canvas, свойство states будет использовать пространство имен XML, в котором определен MyComponent.

Короче говоря, не думайте о свойстве states как mx: states , потому что префикс mx: свойства просто наследуется от компонента , Однако мы должны использовать mx: , когда определяем само фактическое состояние, потому что это класс (а не свойство), и этот класс определен в пространстве имен mx.

Чтобы продвинуться дальше в объяснении, вы можете изменить пространство имен http://www.adobe.com/2006/mxml на нечто иное, чем mx .

<zzz:VBox xmlns:zzz="http://www.adobe.com/2006/mxml">
    <zzz:states>
    </zzz:states>
</zzz:VBox>

В этом примере мы меняем mx на zzz . Теперь states должно иметь префикс zzz: вместо mx: .

1 голос
/ 16 декабря 2008
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
         width="100%" 
         height="100%"
         backgroundColor="#f7f7f7" 
         xmlns:common="com.americanexpress.voice.view.component.common.*">
    <mx:states name="edit">

Почему это не получается? Я также обнаружил, что это не удается, когда у меня определено несколько пространств имен. Удалите <mx:, чтобы устранить проблему.

...