2012-07-18 2 views
1

J'ai une page web (php) qui gère une série de formulaires ajax et de simples divs hide/show en fonction du contenu d'un téléchargement externe destiné aux membres enregistrés d'une organisation. Afin de construire un site plus maintenable et extensible, j'ai cherché dans l'utilisation des modèles architecturaux pour empêcher l'enchaînement de jQuery sans fin; à savoir, le modèle de médiateur.Problèmes d'espace de noms lors de l'implémentation de mediator.js

Est-ce que quelqu'un a utilisé Mediator.js de Jack Lawson? Fondamentalement, vous pouvez vous abonner avec le médiateur pour écouter sur un "canal" (namespaces) avec une fonction à exécuter quand quelque chose est publié sur ce même canal (et même vérifier une fonction vrai/faux prédicat avant de répondre, si nécessaire).

L'objectif: Le mediator.js api semble comme il a un grand potentiel, ainsi que me forcer à mettre en œuvre un document xhtml valide et utiliser correctement les espaces de noms. L'implémentation d'un modèle de médiateur semble être un excellent moyen de découpler le code javascript et de rendre une application web compliquée beaucoup plus facile à maintenir et extensible à l'avenir.

La Frustration: Je crois que je comprends les deux espaces de noms et le modèle de médiateur mis en œuvre par le mediator.js api. J'ai pu publier avec succès des événements d'attributs DOM à travers un médiateur sur des "canaux" spécifiques (namespaces) et m'abonner à ces canaux et y réagir - même en utilisant la méthode mediator.js pour tester un "prédicat" sur ce canal afin de vérifier si une réponse est nécessaire. Mais mon CSS est maintenant incapable de reconnaître les éléments en raison des nouveaux espaces de noms.

Je crée des espaces de noms comme celui-ci:

<xmlns:active='http://www.xxx.com/tracks/active' 
xmlns:completed='http://www.xxx.com/tracks/completed' 
xmlns:inactive='http://www.xxx.com/tracks/inactive'> 

puis de les appliquer à des éléments HTML, tels que:

<active:div ...>stuff</active:div> 

J'ai changé le fichier css en conséquence:

active|div { css formatting } 

encore, le formatage CSS de la page est cassé.

La partie doctype de la page rendu ressemble à:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> 

Je ne suis pas tout à fait sûr que ce ne soit pas nécessaire, mais j'ai essayé d'ajouter:

<? header('Content-Type: application/xhtml+xml'); ?> 

qui produit une analyse syntaxique XML erreur de:

XML Parsing Error: not well-formed

qui pointe vers le signe égal dans cette définition d'espace de noms xmlns:active='http://www.xxx.com/tracks/active' comme le problème, mais chaque document que je lis montre que c'est la syntaxe correcte.

Questions:

  1. Pourquoi mon CSS rompu après la mise en œuvre des namespaces je montrais ci-dessus?
  2. Pourquoi, lorsque j'ajoute le <? header('Content-Type: application/xhtml+xml'); ?> dans l'en-tête, est-ce que j'obtiens l'erreur d'analyse mentionnée?

Nous vous remercions de votre aide.

Répondre

2
  1. Why is my CSS broken after implementing the namespaces I showed above?

    Les espaces de noms ne peuvent être résolus au sein de votre CSS lorsque vous ajoutez @namespace déclarations correspondant à vos espaces de noms XML. Ceci est décrit dans le spec.

    Assurez-vous que votre feuille de style a fait la déclaration suivante, placée à un endroit approprié (directement après tous les @charset s et @import s):

    @namespace active 'http://www.xxx.com/tracks/active'; 
    

    Si vous avez des styles pour le reste de vos espaces de noms, vous aurez besoin d'inclure ceux aussi bien:

    @namespace completed 'http://www.xxx.com/tracks/completed'; 
    @namespace inactive 'http://www.xxx.com/tracks/inactive'; 
    
  2. Why, when I add the <? header('Content-Type: application/xhtml+xml'); ?> in the header, do I get the parsing error mentioned?

    en effet, lorsque vous ajoutez l'en-tête, votre page XHTML est servi en tant que document sérialisé XML. Incidemment, c'est ainsi que les pages XHTML sont censées être servies, car XHTML est dérivé de XML. Si vous n'incluez pas l'en-tête, les serveurs les enverront généralement sous la forme text/html, ce qui signifie que votre XHTML utilise un analyseur de soupes de balises HTML et non un analyseur XML.

    Les règles d'analyse XML sont très strictes; une seule erreur de syntaxe empêchera le rendu complet de votre document. Puisque vous semblez avoir une déclaration xmlns malformée, cela empêche votre page XHTML d'être rendue correctement. D'un autre côté, étant donné la flexibilité et la clémence des règles de syntaxe HTML, un navigateur ne crachera aucun message d'erreur même s'il rencontre de sérieux problèmes de syntaxe dans votre balisage - il essaiera juste de se faufiler entre les erreurs et de faire des suppositions à quelle était la structure DOM voulue.

    En ce qui concerne l'erreur elle-même, vos xmlns attributs ressemblent, ils doivent faire partie de la balise d'ouverture html au lieu de leur propre élément, car ils sont des attributs:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml" 
         xmlns:active="http://www.xxx.com/tracks/active" 
         xmlns:completed="http://www.xxx.com/tracks/completed" 
         xmlns:inactive="http://www.xxx.com/tracks/inactive"> 
    

    Enfin, vous avez besoin que tête ! Sans cela, votre XHTML ne sera pas analysé comme vous le devriez, et vos espaces de noms CSS ne fonctionneront donc pas non plus.

+0

Cette réponse était HUGELY utile! Merci, BoltClock! J'ai oublié de mentionner que j'avais fait les déclarations @namespace, mais vos corrections à l'élément html avec l'endroit où le mettre a fait la différence. Mon code a encore besoin de corrections supplémentaires mais je ne pense pas que ce sera trop loin. Est-il préférable de passer à travers ces erreurs d'analyse xml un par un (si vous croyez que vous n'êtes pas trop loin), Ou y at-il une meilleure façon? Je me souviens d'avoir lu que les validateurs XHTML n'étaient pas parfaits en eux-mêmes. Avez-vous une méthode préférée que vous utilisez? ** Merci pour l'aide de la Grande Ligue. ** – Ricalsin

+0

Pas de problème. Cependant, je n'ai pas beaucoup travaillé avec XML, et quand je le fais, je suis généralement très prudent avec mon code, donc je ne vais pas devoir passer par trop d'erreurs ... Je suppose que c'est la meilleure astuce peut donner! En outre, utilisez un éditeur qui prend en charge XML en tant que langage pour faciliter la détection des erreurs de pré-validation. – BoltClock

+0

Alors quand les gens disent "ceci est un site compatible html5" et qu'il crache des erreurs quand on le force à l'analyser comme xml (via ** application/xhtml + xml **) alors ce n'est pas compatible html5, non?Le moteur d'analyse utilisera sa version "tag soup" pour rendre la page, ce qui rendra des choses comme XSLT et namespacing irréalisables maintenant que "l'intelligence d'analyse" en apprenant que la structure xml est propre n'est plus là. Je suppose que vous pouvez annuler le '+ xml' et permettre à l'analyseur d'adopter une approche Polyglot sur votre page, mais pas si elle requiert ce genre d'intelligence (?). – Ricalsin

Questions connexes