J'utilise JSON pour analyser des données HTML avec des balises html personnalisées dans Flex. Le support de Flex pour HTML est assez minime, donc je me demande s'il est possible de faire un simple effet de changement de couleur sur ces liens. Actuellement, j'ai trouvé que Flex ne supporte que quelques balises HTML, mais supporte aussi CSS via les méthodes CSS de Flex. Puis-je manipuler le code HTML écrit dans mes fichiers JSON via un fichier CSS externe? Ou mieux encore en utilisant une simple balise avec le fichier JSON?JSON en tant que données HTML dans Flex - Déplacements de liens hypertexte
Répondre
Réponse courte: Je ne pense pas qu'il existe une solution miracle pour cela. Ça va être très douloureux.
Vous pouvez commencer par étendre la classe Text d'une manière qui ajoute une propriété StyleSheet statique (par exemple, styleSheet: StyleSheet = null). Ensuite, créez un tableau qui contient les styles suivants, les seuls pris en charge par Flex:
listOfStyles:Array = ['fontSize', 'color', 'fontWeight', 'fontFamily', 'fontStyle', 'textDecoration'];
Ensuite, vous devez initialiser les StyleManager.selectors, la création d'un tableau de sélecteurs que vous allez utiliser. Fondamentalement, vous trouvez la balise "A" et ajoutez les listOfStyles ci-dessus, puis créez une nouvelle CSSStyleDeclaration pour chacun de ces styles.
Cela vous permettra d'appliquer les styles nommés ci-dessus à la propriété htmlText de votre classe étendue. Jusqu'ici tout va bien. Cela vous permet de définir différents styles pour vos balises d'ancrage lors du chargement, en utilisant une feuille de style externe. Toutefois, appliquer un effet de survol, où chaque lien change de couleur lors du survol dans le code HTML, serait problématique car MouseEvent.MOUSE_OVER s'appliquerait à la classe dans son ensemble, et non aux éléments HTML individuels qu'elle contient. Vous auriez à déterminer si la souris était au-dessus d'une ancre dans ce texte HTML (pas impossible, mais je n'ai pas le temps de le faire maintenant) et changer votre sélecteur à l'intérieur. Cela impliquerait d'obtenir la gamme de texte, et cela signifie toujours beaucoup de travail. Je devais jouer avec ça quand un client voulait que des émoticônes apparaissent dans le flux de texte (autre chose que l'implémentation de HTML de Flex échoue à supporter) et c'était extrêmement monstrueux. Je crois que Flex 4 va ajouter plus de support natif pour ce genre de chose, mais je n'ai pas fait de recherche spécifique. Désolé je n'ai pas de solution miracle pour vous, mais j'espère que cela jette un peu de lumière sur le sujet.
Je n'utilise Flex souvent si peu dans la connaissance cadre de profondeur, mais je pense que je besoin de quelque chose de similaire:
faire un simple changement de couleur de police capotage effet
Voici un extrait:
var linkRegEx:RegExp = new RegExp("(https?://)?(www\\.)?([a-zA-Z0-9_%]*)\\b\\.[a-z]{2,4}(\\.[a-z]{2})?((/[a-zA-Z0-9_%]*)+)?(\\.[a-z]*)?(:\\d{1,5})?","g");
var link:String = 'generic links: www.google.com http://www.yahoo.com stackoverflow.com';
link = addLinks(linkRegEx,link);
textField.htmlText = link;//textField is a TextField I have on stage
function addLinks(pattern:RegExp,text:String):String{
var result = '';
while(pattern.test(text)) result = text.replace(pattern, "<font color=\"#0000dd\"><a href=\"$&\">$&</a></font>");
if(result == '') result+= text;//if there was nothing to replace
return result;
}
Je viens d'utiliser la balise de police en ligne, css pourrait être mieux. Voici mon original question.
HTH, George
Merci beaucoup. Cela me donne une idée de base de l'endroit où aller, mais j'ai besoin de comprendre comment passer le CSSStyleDeclaration à travers le fichier JSON. J'apprécie la réponse. Maintenant j'ai quelque chose pour commencer au moins. À la votre – grammar