Envoyé par : Utilisateur anonyme
Date : 09/11/2004 17:27
Salut à tous,
J'ai un problème tout bête :
J'ai un XBL dérivant d'un textbox et je dois redéfinir dans mon nouvel objet les methodes setAttribute(...), getAttribute(...) et finalement removeAttribute(...) pour avoir un comportement identique a un objet "natif" XUL.
Malheureusement, je dois absolument appeler ces mêmes méthodes du parent (donc mon textbox) depuis le nouvel élément, comme en Java en appelant super().getAttribute("value") pour avoir la valeur du vrai textbox.
J'ai trouvé sur Internet un exemple avec un colorpicker disant d'utiliser :
- this.baseBinding.getAttribute("value");
ou
- this.textbox.getAttribute("value");
mais aucune de ces deux solutions ne fonctionnent, j'ai également essayé avec :
- this.getBaseBinding("textbox").getAttribute("value");
mais sans succès.... :(
quelqu'un peut-il m'aider ?
Pour info, j'utilise mozilla 1.7.3.
Merci d'avance pour les tuyaux.
Soki
Envoyé par : laurentj
Date : 11/11/2004 15:36
baseBinding, textbox, getBaseBinding sont défini quelques parts dans ton xbl ? Cela devrait être des propriétés, champs et méthodes...
Envoyé par : Utilisateur anonyme
Date : 12/11/2004 10:30
Re,
En fait, ils ne sont pas défini par moi. Mais d'après des recherches sur le net, ces fonctions/propriétés devraient être définies avec l'héritage de mon XBL, donc accessible directement par Javascript grâce à l'héritage. Mais ça ne fonctionne pas.
Il doit bien y avoir un moyen d'appeler des méthodes d'un objet parent (super), bien que ces méthodes existent dans le parent et dans le fils (surcharge). Enfin, c'est une propriété de base dans la POO !!!
Quelqu'un sait comment faire ?
Envoyé par : laurentj
Date : 19/11/2004 12:45
Enfin, c'est une propriété de base dans la POO !!!
Sauf qu'ici, ce n'est pas de la POO comme tu l'entends
Sinon, qu'entend tu par heritage ? Ton textbox, il est où ? dans le <content> de ton binding, ou c'est la balise rattachée à ton binding via -moz-binding ?
Dans le premier cas :
1) met un attribut sur ton text box, par exemple "anonid". l'attribut id ne te permettra pas de recupèrer ton text box
<textbox anonid="foo" />
2) tu récupere une référence sur ton textbox
var thetextbox = document.getAnonymousElementByAttribute(this, 'anonid', 'foo');
3) tu fais ensuite ce que tu veux
thetextbox.setAttribute...
Si ton textbox herite des attributs de ton binding (avec xbl:inherits=".."), fais directement un this.setAttribute et ça modifera automatiquement les attributs correspondant dans ton text box
Il s'agit du deuxième cas :
this.setAttribute(..) devrait suffire..
Envoyé par : Utilisateur anonyme
Date : 23/11/2004 13:39
Re,
Laurentj, je suis tout à fait d'accord avec ce que tu dis, mais le problème n'est pas la !
J'hérite d'un textbox via :
<xbl:binding id="myTextBox" extends="chrome://global/content/bindings/textbox.xml#textbox">
Et après je surcharge la proprité "value"
<xbl:property name="value"> <xbl:setter><![CDATA[ this.value = val; ]]></xbl:setter> <xbl:getter><![CDATA[ return this.value; ]]></xbl:getter> </xbl:property>
Pour avoir un comportement identique entre "value" et "setAttribute('value','foo')", j'appele la propriété "value" si l'attribut de la méthode est "value"... pas facile à dire, voici un exemple :
<xbl:method name="setAttribute"> <xbl:parameter name="attribute"/> <xbl:parameter name="value"/> <xbl:body><![CDATA[ switch (attribute){ case "value": this.value = value; default: this.setAttribute(attribute,value); } ]]></xbl:body> </xbl:method>
Donc le problème, c'est quand on appele :
this.setAttribute(attribute,value);
en effet, cela provoque un appele recursif... moi j'aimerai "dévier" l'appele de cette fonction sur l'object parent : le textbox à la base de mon héritage.
Quelqu'un a-t-il une solution à proposer ??? car la... c'est galère, C'est exemple qui est extrêmemennt simplifié... ce que je dois faire est bien plus compliqué. Je doit absolument garder les mêmes noms de propriété et de méthode pour que ces objets soient géré de manière transparente.
Merci d'avance pour tous les tuyaux.
Soki
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.