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

Я знаю, что вы можете применять 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 (что не является жизнеспособным вариантом). Есть ли способ обойти это?

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
6
0
15 021
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

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

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

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

Удачи.

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

"I've created a small class that will 'parse' a CSS file read with an HTTPService object. It takes apart the string that is returned by the HTTPService object, break it down into selectors, and create a new CSSStyleDeclaration object for each selector that is found. Once all the properties are assigned to the CSSStyleDeclaration object it's added to the StyleManager. It doesn't perform any checks, you should make sure the CSS file is well formed, but it will be sufficient 99% of the time. Stuff like @font, Embed() and ClassReference() will hardly be used by my customers. They do need the ability to change colors and stuff like that so they can easily theme the Flex application to their house style."

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

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

Это сработало для меня - вместо использования parseCSS я сам проанализировал строку и установил каждое свойство с помощью: StyleManager.getStyleDeclaration ("Component"). SetStyle ("property", value); Что-то вроде взлома, ну да ладно ...

onekidney 06.04.2009 22:22

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

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


См. Мой вопрос: «Ищу парсер 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 года?

Rob W 24.09.2011 00:45

@Rob Я нашел этот вопрос, выполнив поиск в Google, и подумал, что ответ был неполным. Мой ответ завершает вопрос и будет полезен для людей, нашедших вопрос (как и я) в Google.

sixtyfootersdude 26.09.2011 17:32

Другие вопросы по теме