Как каждый определяет стиль по умолчанию для пользовательского компонента Flex?

Это твой вопрос просто ...

почему отсутствует error.response?

Если это так, причина в том, что ресурс, обрабатывающий ваш запрос POST, не отвечает заголовком Access-Control-Allow-Origin, даже при том, что это делает для запроса перед полетом OPTIONS.

Из-за политики CORS вашему клиентскому коду поэтому отказано в доступе к ответу HTTP и, следовательно, error.response не определено.

В вашем обработчике ошибок вы можете предположить, что пустое свойство response соответствует проблеме сетевого уровня.

10
задан Kevin Moore 30 January 2009 в 21:41
поделиться

5 ответов

Два пути, обычно. Только путем ссылки на имя класса непосредственно - так, например, если Вы создали новый класс компонента MyComponent в ActionScript, или косвенно путем создания компонента MXML, расширяющего другой UIComponent названный MyComponent, в обоих случаях компонент взял бы стили, объявленные в Вашей внешней таблице стилей, при условии, что таблица стилей была импортирована в Ваше приложение (например, через Style source):

MyComponent
{
     backgroundColor: #FFFFFF;
}

Иначе путем установки UIComponent's styleName свойство (как строка):

public class MyComponent
{
     // ...

     this.styleName = "myStyle";

     // ...
}

... и определение стиля в файле CSS как так (отмечают запись через точку):

.myStyle
{
     backgroundColor: #FFFFFF;
}

Иметь смысл?

8
ответ дан 3 December 2019 в 15:36
поделиться

В дополнение к тому, что предложенный Christian Nunciato, другая опция должен определить статический инициализатор для Ваших стилей компонента Flex. Это позволяет Вам устанавливать стили по умолчанию, не требуя, чтобы разработчик включал файл CSS.

private static function initializeStyles():void
{
    var styles:CSSStyleDeclaration = StyleManager.getStyleDeclaration("ExampleComponent");
    if(!styles)
    {
        styles = new CSSStyleDeclaration();
    }

    styles.defaultFactory = function():void
    {
        this.exampleNumericStyle = 4;
        this.exampleStringStyle = "word to your mother";
        this.exampleClassStyle = DefaultItemRenderer //make sure to import it!
    }

    StyleManager.setStyleDeclaration("ExampleComponent", styles, false);
}
//call the static function immediately after the declaration
initializeStyles();
6
ответ дан 3 December 2019 в 15:36
поделиться

Уточнение того, что предлагает Joshtynjala:

public class CustomComponent extends UIComponent {
    private static var classConstructed:Boolean = classConstruct();

    private static function classConstruct():Boolean {
        if (!StyleManager.getStyleDeclaration("CustomComponent")) {
            var cssStyle:CSSStyleDeclaration = new CSSStyleDeclaration();
            cssStyle.defaultFactory = function():void {
                this.fontFamily = "Tahoma";
                this.backgroundColor = 0xFF0000;
                this.backgroundAlpha = 0.2;
            }
            StyleManager.setStyleDeclaration("CustomComponent", cssStyle, true);
        }
        return true;
    }
}

Я где-то прочитал это в документах; Метод ClassContruct вызывается автоматически.

2
ответ дан 3 December 2019 в 15:36
поделиться

Кристиан прав насчет применения CSS, но если вы планируете использовать компонент в библиотеке между проектами вы захотите написать файл css по умолчанию для этой библиотеки. Вот как вы это делаете:

  1. Создайте файл css с именем «defaults.css» (будет работать только это имя!) И поместите его на верхний уровень в папке «src» вашей библиотеки. Если файл css ссылается на какие-либо активы, они также должны находиться в src.
  2. (ВАЖНО!) Перейдите в Свойства проекта библиотеки> Путь сборки библиотеки Flex> Активы и включите файл css и все ресурсы.

Вот как команда Adobe устанавливает все свои стили по умолчанию, теперь вы тоже можете это сделать. Только что понял это - огромный

9
ответ дан 3 December 2019 в 15:36
поделиться

Чтобы создать стиль по умолчанию, вы также можете иметь свойство в своем классе и переопределить функцию styleChanged () в UIComponent, например, чтобы рисовать цвет фона только на половине ширины компонента:

// this metadata helps flex builder to give you auto complete when writing
// css for your CustomComponent
[Style(name="customBackgroundColor", type="uint", format="color", inherit="no")]

public class CustomComponent extends UIComponent {

    private static const DEFAULT_CUSTOM_COLOR:uint = 0x00FF00;

    private var customBackgroundColor:uint = DEFAULT_CUSTOM_COLOR;

    override public function styleChanged(styleProp:String):void
    {
        super.styleChanged(styleProp);

        var allStyles:Boolean = (!styleProp || styleProp == "styleName");

        if(allStyles || styleProp == "customBackgroundColor")
        {
            if(getStyle("customBackgroundColor") is uint);
            {
                customBackgroundColor = getStyle("customBackgroundColor");
            }
            else
            {
                customBackgroundColor = DEFAULT_CUSTOM_COLOR;
            }
            invalidateDisplayList();
        }

        // carry on setting any other properties you might like
        // check out UIComponent.styleChanged() for more examples
    }

    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
    {
        super.updateDisplayList(unscaledWidth, unscaledHeight);

        graphics.clear();
        graphics.beginFill(customBackgroundColor);
        graphics.drawRect(0,0,unscaledWidth/2,unscaledHeight);
    }
}

Вы также можете создать сеттер для customBackgroundColor, который вызывал invalidateDisplayList (), поэтому вы также можете установить свойство customBackgroundColor программно, а также через css.

1
ответ дан 3 December 2019 в 15:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: