Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Héritage du contenu ne marche pas en XBL.

Envoyé par : nicocaen

Date : 17/08/2004 12:32

Bonjour à tous,

j'ai un soucis avec l'héritage du contenu en XBL. Le code suivant marche bien, devisTab affiche bien le bouton "Welcome" :

<?xml version="1.0"?>
<bindings id="facturationMain" xmlns="http://www.mozilla.org/xbl"    xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<binding id="mainTab" extends="xul:tabPanel">
	<content>
		<xul:button id="welcomeButton" label="Welcome" />
	</content>
</binding>
<binding id="devisTab" extends="chrome://taikaPGISuite/content/facturation/bindings/facturationMain.xml#mainTab">
</binding>
</bindings>

En revanche, si j'ajoute du contenu à devisTab, celui-ci écrase celui de la classe mère :

<?xml version="1.0"?>
<bindings id="facturationMain" xmlns="http://www.mozilla.org/xbl"   xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<binding id="mainTab" extends="xul:tabPanel">
	<content>
		<xul:button id="welcomeButton" label="Welcome" />
	</content>
</binding>
<binding id="devisTab" extends="chrome://taikaPGISuite/content/facturation/bindings/facturationMain.xml#mainTab">
	<content>
		<xul:label id="new label" value="Nouveau Label" />
	</content>
</binding>
</bindings>

et ceci malgrès ce qui est dit ici : http://www.jalix.org/ressources/internet/dom/~vrac/mozilla/xbl.html#content-inheritance

Je tourne en rond depuis qq heures sans trouver de solution ou de réponse à mon pb sur le web. Où est-ce que je pêche ??

Nicolas

# Re: Héritage du contenu ne marche pas en XBL.

Envoyé par : laurentj

Date : 17/08/2004 17:06

je ne sais pas si tu as remarqué, mais la documentation que tu nous indique date de 2000, et c'est un working draft, un brouillon quoi, donc il ne faut pas s'y fier :-)

Vaut mieux lire la note du W3C concernant XBL http://www.w3.org/TR/xbl/ ou http://www.mozilla.org/projects/xbl/xbl.html

Bon sinon, ton problème semble normal : le contenu d'un binding ecrase ceux qu'il aurait éventuellement hérité. Et c'est plus logique finalement. Car alors, qu'est ce qui nous permettrait de changer le contenu originel ? (dans ta doc, il est dit que ce que l'on met dans le content, se rajoute au content des ancetres, ce qui veut dire que l'on ne pourrait rien changer des ancetres, pas top)

# Re: Héritage du contenu ne marche pas en XBL.

Envoyé par : nicocaen

Date : 17/08/2004 17:50

désolé pour la doc je n'avais pas vu.

Concernant l'héritage, et la programmation objet, on ajoute toujours des particularités à la classe fille par rapport aux ancètres. Il est vrai que ton argument se tient car si il n'y avait pas écrasement, on arriverait à des situations de blocage, ou bien il faudrait annuler certains composants. Après tout il doit être possible de se débrouiller avec les constructeurs ou un méthode init(). Mais je n'ai pas l'impression qu'il soit possible de faire par exemple super.init();. Y-a-t-il un moyen d'appeler spécifiquement une méthode de la classe mère ?


Nicolas

# Re: Héritage du contenu ne marche pas en XBL.

Envoyé par : laurentj

Date : 18/08/2004 09:54

Concernant l'héritage, et la programmation objet, on ajoute toujours des particularités à la classe fille par rapport aux ancètres.

on ne fait pas qu'ajouter, mais aussi modifier : c'est ce qu'on appelle en POO la surcharge ;-)

Le contenu d'un XBL ne peut être que surchargé. Par contre, la partie <implementation> on peut surcharger et ajouter.

Pour appeler une méthode d'un composant père, voir http://www.mozilla.org/projects/xbl/xbl.(..)

apparement, si on a par exemple un colorpickergrid (myElement) qui dérive de colorpicker, on peut faire un :

myElement.ColorPicker.setColor(); // appele la méthode de ColorPicker
myElement.setColor(); // appele la méthode de ColorPickerGrid

ou encore

myElement.baseBinding.setColor(); // appele la méthode de ColorPicker

à verifier tout ça, je n'ai pas testé

# Re: Héritage du contenu ne marche pas en XBL.

Envoyé par : nicocaen

Date : 19/08/2004 13:59

D'accord avec toi si on considère le contenu comme une liste, ce qu'il doit être au fond. Mais on pourrait imaginer un système d'exclusion, où l'on dirait dans la classe fille les éléments que l'on ne veut pas garder, mais je chipotte :-)

En tous cas merci de tes précieux conseils, je les testes, dès que possible (j'ai autre chose sur le feu) et je te tiens au courant.

Nicolas

# Re: Héritage du contenu ne marche pas en XBL.

Envoyé par : Utilisateur anonyme

Date : 21/10/2004 15:55

Bonjour,

J'essaie également d'accéder aux méthodes de l'élément étendu depuis un XBL, mais sans succès.

Mon object inputBox dérive d'un textbox (extends="chrome://global/content/bindings/textbox.xml#textbox") et j'aimerai surcharger les méthodes setAttribute et getAttribute pour l'attribut "value" et pour les autres attributs renvoyé l'appel de ces fonctions à l'élément "parent" (exemple : super().setAttribute(...)). J'aimerai également surcharger la propriété value (get et set) pour avoir un objet complet et fiable. Malheureusement, ni this.textbox.setAttribute(...) ni this.baseBinding.setAttribute(...) ne fonctionne. Voir mon code simplifié. Le traitement réel n'est pas uniquement de mettre des lettres en majuscules.

Pouvez vous m'aidez ??

J'utilise Mozilla 1.7 mais je n'ai pas vu de correction dans les logs des correctifs des nouvelles versions.

Voici mon code :

<xbl:binding id="inputBox"  extends="chrome://global/content/bindings/textbox.xml#textbox">
  <xbl:implementation>  			
    <xbl:property name="value">
      <xbl:setter><![CDATA[	
        // change la valeur dans le text box
        this.inputField.value = this.inputField.value.toUpperCase();
        return this.inputField.value;
        ]]></xbl:setter>
      <xbl:getter><![CDATA[			
        // retourne la valuer dans le text box
        return this.inputField.value;
        ]]></xbl:getter>
    </xbl:property>
  <xbl:method name="setAttribute">
    <xbl:parameter name="attribute"/>
    <xbl:parameter name="value"/>
    <xbl:body><![CDATA[					
      // surcher uniquement l'attribut value
      switch (attribute){
        case "value":
          this.value = value;
          break;
        default:
          this.baseBinding.setAttribute(attribute,value);	
      }			
      ]]></xbl:body>
    </xbl:method>		
  </xbl:implementation>
</xbl:binding>

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.