Модули Flex и настраиваемое текстовое поле - PullRequest
0 голосов
/ 24 февраля 2010

Это действительно странно. Я создал свой собственный класс CustomTextField, который я использую для встраивания шрифта и установки defaultTextFormat. Это работает абсолютно нормально, но по какой-то причине, когда я пытаюсь создать новый CustomTextField в любом модуле, кроме родительского приложения, текстовый текст отображается только иногда.

Вот мой класс CustomTextField:

package uk.package.text
{
    import flash.text.AntiAliasType;
    import flash.text.Font;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;

    public class CustomTextField extends TextField
    {

        [Embed(source='../assets/fonts/Arial.ttf',fontName='CustomFont',fontWeight='regular',
            unicodeRange='U+0020-U+0040,U+0041-U+005A,U+005B-U+0060,U+0061-U+007A,U+007B-U+007E,U+0080-U+00FF,U+0100-U+017F,U+0400-U+04FF,U+0370-U+03FF,U+1E00-U+1EFF',
            mimeType='application/x-font-truetype'
            )]
        public static var MY_FONT:Class;
        [Embed(source='../assets/fonts/Arial Bold.ttf',fontName='CustomFont',fontWeight='bold',
            unicodeRange='U+0020-U+0040,U+0041-U+005A,U+005B-U+0060,U+0061-U+007A,U+007B-U+007E,U+0080-U+00FF,U+0100-U+017F,U+0400-U+04FF,U+0370-U+03FF,U+1E00-U+1EFF',
            mimeType='application/x-font-truetype' 
            )]
        public static var MY_FONT_BOLD:Class;

        public static const DEFAULT_FONT:String = "Arial";
        public static const DEFAULT_TEXT_COLOUR:int = 0x000000;
        public static const DEFAULT_TEXT_SIZE:int = 14;

        private var _tf:TextFormat = new TextFormat(DEFAULT_FONT, DEFAULT_TEXT_SIZE, DEFAULT_TEXT_COLOUR);

        public function CustomTextField():void
        {
            var CustomFont:Font = new MY_FONT();
            _tf.font = CustomFont.fontName;
            _tf.size = 16;

            embedFonts = true;
            antiAliasType = AntiAliasType.ADVANCED;
            defaultTextFormat = _tf;
            autoSize = TextFieldAutoSize.LEFT;
        }

        public override function set htmlText(value:String):void
        {
            super.htmlText = value;
            setTextFormat(_tf);
        }

        public function get textFormat():TextFormat
        {
            return _tf;
        }

    }
}

Странно, как иногда это работает, а иногда нет ... возможно, что-то странное происходит с модулями?

Ответы [ 2 ]

2 голосов
/ 25 февраля 2010

Хорошо, мне понадобилось много времени, чтобы понять. Наконец-то я заработал, используя следующий код:

preinitialize="moduleLoader.moduleFactory=Application.application.systemManager;"

В элементе загрузчика модуля.

Спасибо!

1 голос
/ 24 февраля 2010

да, это почти наверняка проблема с модулем. Я видел нечто подобное раньше. Я ищу ответ, но моя первоначальная мысль - установить

moduleLoader.applicationDomain = ApplicationDomain.currentDomain

Другая проблема, если вы загружаете один и тот же модуль дважды. Если это так, вам нужно сделать URL уникальным, добавив file.swf?<randomNumber> или что-то подобное.

...