Как вы динамически загружаете файл CSS в приложение Flex? - PullRequest
6 голосов
/ 15 октября 2008

Я знаю, что вы можете применять CSS для стилизации объектов в Flex с помощью StyleManager:
http://livedocs.adobe.com/flex/3/html/help.html?content=styles_07.html

Вы также можете динамически загружать скомпилированные файлы CSS (SWF):
http://livedocs.adobe.com/flex/3/html/help.html?content=styles_10.html

Однако я динамически создаю свои CSS-файлы, используя веб-интерфейс и серверный скрипт. Если CSS изменяется, тогда сценарию также необходимо скомпилировать CSS в SWF (что не является приемлемым вариантом). Есть ли способ обойти это?

Ответы [ 4 ]

3 голосов
/ 15 октября 2008

В этот комментарий к проблеме, связанной с этим, в трекере ошибок Adobe T. Busser описывает, что может быть для вас приемлемым решением:

"Я создал небольшой класс, который будет« анализировать »файл CSS, прочитанный с помощью HTTPService объект. Это разбирает строка, которая возвращается HTTPService объект, разбить его на селекторы, и создайте новый CSSStyleDeclaration объект для каждого селектор, который найден. Раз все свойства присваиваются Объект CSSStyleDeclaration добавлен в StyleManager. Это не выполнить любые проверки, вы должны сделать уверен, что файл CSS правильно сформирован, но этого будет достаточно в 99% случаев. Вещи как @font, Embed () и ClassReference () вряд ли будет использоваться моими клиентами. Им нужно умение менять цвета и прочее так, чтобы они могли легко тему Flex приложение к своему дому стиль. "

Вы можете попытаться связаться с этим человеком для его решения или, альтернативно, использовать код из этого проекта as3csslib в качестве основы для написания чего-то похожего на то, что они описывают.

2 голосов
/ 24 сентября 2011

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

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


См. Мой вопрос: " Ищем парсер CSS, написанный на AS3 " для полного обсуждения, но я нашел парсер CSS, скрытый в стандартных библиотеках Вот как это можно использовать:

public function extractFromStyleSheet(css:String):void {

    // Create a StyleSheet Object
    var styleSheet:StyleSheet = new StyleSheet();
    styleSheet.parseCSS(css);

    // Iterate through the selector objects
    var selectorNames:Array = styleSheet.styleNames;
    for(var i:int=0; i<selectorNames.length; i++){

        // Do something with each selector
        trace("Selector: "+selelectorNames[i];

        var properties:Object = styleSheet.getStyle(selectorNames[i]);
        for (var property:String in properties){

            // Do something with each property in the selector
            trace("\t"+property+" -> "+properties[property]+"\n");
        }
    }
}

Затем вы можете применить стили, используя:

cssStyle = new CSSStyleDeclaration();
cssStyle.setStyle("color", "<valid color>);
FlexGlobals.topLevelApplication.styleManager.setStyleDeclaration("Button", cssStyle, true);
2 голосов
/ 01 апреля 2009

Вы также можете реализовать динамическую таблицу стилей в flex, как это. Здесь я нашел эту статью: http://askmeflash.com/article_m.php?p=article&id=6

0 голосов
/ 15 октября 2008

Применение CSS во Flex обрабатывается на стороне сервера при компиляции, а не на стороне клиента во время выполнения.

Тогда я бы увидел два варианта для вас (я не уверен, насколько они практичны):

  1. Используйте сценарий на стороне сервера, чтобы скомпилировать ваш CSS как SWF, а затем загрузить их динамически.
  2. Анализ таблицы стилей CSS и использование функций setStyle в flex для применения стилей. Примером такого подхода является Flex Style Explorer , где вы можете проверить source .

Удачи.

...