2008-10-15 9 views
6

sé que se puede aplicar CSS con el fin de objetos de estilo en Flex utilizando el StyleManager:
http://livedocs.adobe.com/flex/3/html/help.html?content=styles_07.html¿Cómo carga dinámicamente un archivo CSS en una aplicación Flex?

También puede cargar compilados archivos CSS (SWF) de forma dinámica:
http://livedocs.adobe.com/flex/3/html/help.html?content=styles_10.html

Sin embargo, Estoy creando dinámicamente mis archivos CSS usando una GUI web y una secuencia de comandos del lado del servidor. Si se modifica el CSS, el script también debería compilar el CSS en un archivo SWF (que no es una opción viable). ¿Hay alguna forma de evitar esto?

Respuesta

0

La aplicación de CSS en Flex se maneja en el servidor en la compilación y no en el lado del cliente en tiempo de ejecución.

que iba a ver a continuación, dos opciones para usted (no estoy seguro de cómo sea práctico son):

  1. uso de un script del lado del servidor para compilar el CSS como SWF luego cargarlos dinámicamente.
  2. Analice una hoja de estilos CSS y use las funciones setStyle en flex para aplicar los estilos. Un ejemplo similar a este enfoque es el Flex Style Explorer donde puede consultar el source.

Buena suerte.

3

En this comment a un problema relacionado con esto en el seguimiento de errores Adobe T. Busser está describiendo lo que podría ser una solución viable para usted:

"He creado una pequeña clase que se 'parse' un archivo CSS leer con un HTTPService objeto. se desmonta la cadena que devuelve el objeto HTTPService, descomponerlo en selectores, y crear un nuevo objeto CSSStyleDeclaration para cada selector que se encuentra. Una vez que todo t Las propiedades se asignan al objeto CSSStyleDeclaration y se agrega al StyleManager. No hace realizar comprobaciones, debe hacer para asegurarse de que el archivo CSS está bien formado, pero será suficiente el 99% del tiempo. Cosas como @font, Embed() y ClassReference() apenas serán utilizadas por mis clientes. Lo hacen necesitar la capacidad de cambiar los colores y cosas de esa manera para que puedan fácilmente tema de la aplicación Flex a su estilo de la casa ."

Usted podría tratar de ponerse en contacto con esta persona para su solución o, alternativamente, .. tal vez utilizar el código de this as3csslib project como base para escribir algo así como lo que están describiendo

2

también puede implementar hoja de estilo dinámico en flexión como esto aquí me encontré con este artículo: http://askmeflash.com/article_m.php?p=article&id=6

+1

Esto funcionó bien para mí - en lugar de utilizar parseCSS terminé analizar la cadena mí y para el establecimiento de cada propiedad utilizando: StyleManager.getStyleDeclaration ("Component"). setStyle ("propiedad", valor); Tipo de truco, pero bueno ... – onekidney

2

Editar: Esta solución no funciona.Todos los selectores que se extraen del analizador se convierten a minúsculas. Esto puede funcionar para su aplicación, pero probablemente no ...

Estoy dejando aquí esta respuesta porque puede ayudar a algunas personas que buscan una solución y advertir a los demás sobre las limitaciones de este método.


Ver mi pregunta: "Looking for CSS parser written in AS3" para una discusión completa, pero me pareció un analizador CSS oculta dentro de las bibliotecas estándar. He aquí cómo usted puede utilizarlo:

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"); 
     } 
    } 
} 

continuación, puede aplicar los estilos usando:

cssStyle = new CSSStyleDeclaration(); 
cssStyle.setStyle("color", "<valid color>); 
FlexGlobals.topLevelApplication.styleManager.setStyleDeclaration("Button", cssStyle, true); 
+0

¿Por qué publicas en una pregunta contestada que tiene una antigüedad de más de 2 años? –

+1

@Rob Encontré esta pregunta buscando en Google y pensé que la respuesta estaba incompleta. Mi respuesta completa la pregunta y será útil para las personas que encuentren la pregunta (como yo) de Google. – sixtyfootersdude

Cuestiones relacionadas