Ce document contient une tonne de problèmes malheureusement, je vais parcourir chacun d'eux à son tour.
1) Le plus gros problème se produit à quelques reprises et semble provenir d'une certaine confusion entre le model
et l'interface utilisateur. Les deux sont des bêtes entièrement séparées dans XForms, qui adhère au modèle de conception modèle-vue-contrôleur. Donc, vous devez vous rappeler que tout dans le model
est entièrement séparé de tout dans l'interface utilisateur. La relation entre les deux est simplement que les contrôles de l'interface utilisateur peuvent se lier aux nœuds de données d'instance dans votre model
s. Pratiquement, en termes de document, cela signifie que vos éléments select1
et repeat
ne devraient pas être des enfants de model
éléments. Seuls les éléments instance
, bind
et les éléments d'action peuvent être enfants de model
. Vous utilisez plusieurs éléments model
, ce qui est inutile dans une telle forme simple
2) (parce que chaque model
peut contenir plusieurs instance
s et bind
s). La raison pour laquelle je signale ceci est parce que vous introduisez quelques pièges potentiels en utilisant plusieurs model
s, qui sont mieux évités en collant à un model
si possible. Par exemple, la fonction XPath instance
ne fonctionnera pas entre model
s, vous devez donc faire très attention aux dépendances de données entre eux. En outre, un contrôle d'interface utilisateur est actualisé en fonction de model
il est lié à, ce qui m'a souvent causé des problèmes dans le passé lorsque les contrôles ne sont apparemment pas rafraîchissant sainement.
3) Vous avez essayé d'utiliser un élément repeat
pour appliquer un enfant bind
à plusieurs nœuds. Ceci est faux parce que repeat
est un élément d'interface utilisateur, pas un élément de modèle. Toutefois, étant donné que bind
prend un attribut nodeset
au lieu d'un attribut ref
, vous n'avez pas besoin du repeat
du tout. Au lieu de cela, vous pouvez simplement faire ceci:
<xf:bind nodeset="//want" readonly="true()" />
4) Sur un grand nombre de vos contrôles de l'interface utilisateur, vous spécifiez à la fois un attribut de liaison et un attribut ref. Ces attributs sont mutuellement exclusifs, car ils représentent différentes façons d'atteindre la même chose. L'attribut ref doit contenir XPath qui identifie un noeud de données d'instance auquel vous voulez lier le contrôle de l'interface utilisateur.L'attribut bind doit contenir l'identifiant d'un élément de liaison qui a été défini ailleurs (l'élément bind identifiera lui-même le noeud auquel le contrôle se lie dans ce cas, via son attribut nodeset). Ainsi, en utilisant les deux attributs sur le même contrôle d'interface utilisateur, vous vous contredisez.
5) Dans certains cas, vous avez tenté d'utiliser un attribut ref pour lier un contrôle à un autre élément de l'interface utilisateur. Les contrôles peuvent uniquement être liés aux données d'instance.
6) Vous avez un setvalue
à l'intérieur d'un repeat
que vous tentez d'invoquer lors de l'événement xforms-value-changed
. Cet événement n'est pas distribué à l'élément repeat
, donc votre setvalue
ne sera jamais appelé. L'événement xforms-value-changed
est distribué uniquement aux contrôles de formulaire de base, qui sont defined dans le XForms spec comme:
entrée
| secrète | textarea | sortie | télécharger | gamme | déclencheur | soumettre | select | select1
7) Un autre répondre à cette question mentionne que vous avez tort de mettre vos éléments model
dans le corps du document. Malheureusement, je n'ai pas assez de réputation pour y faire des commentaires, mais je voulais simplement souligner que cette réponse est fausse. Bien qu'il soit devenu classique de placer les éléments model
dans le document head
, rien dans la spécification XForms ne le requiert. En fait, un processeur majeur XForms, Ubiquity XForms, nécessite en fait model
d'être dans le document body
, en raison des limitations du navigateur.
En fait, votre point de vue de ne pas mettre de modèle dans le corps n'est pas vrai. La spécification XForms est intentionnellement agnostique sur les détails du langage hôte et ne donne aucun mandat sur l'emplacement du modèle. En effet, une implémentation majeure de la spécification, Ubiquity XForms, exige en fait que les éléments du modèle soient présents dans le corps du document en raison des limitations du navigateur. –