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:
- Pourquoi mon CSS rompu après la mise en œuvre des namespaces je montrais ci-dessus?
- 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.
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
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
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