2009-02-04 28 views
1

Je souhaite déclarer une nouvelle classe dojo héritant d'une classe dojo existante, mais avec mon propre choix de valeurs par défaut pour les propriétés de la classe. (L'utilisateur peut toujours remplacer ces valeurs.)dojo: héritage avec la valeur par défaut - le mixin ne se produit pas

Je déclare ma propre version du dijit.form.FilteringSelect tel que:

  • les hasDownArrow par défaut de propriété à false (plutôt que le true standard) et
  • il y a une propriété supplémentaire possible storeUrl qui me permet de connecter le FilteringSelect au QueryReadStore correspondant.

Voici ce que je l'ai fait, sans succès:

dojo.provide("my.FilteringSelect"); 
dojo.require("dijit.form.FilteringSelect"); 
dojo.require("dojox.data.QueryReadStore"); 
dojo.declare(
    "my.FilteringSelect", 
    [ 
     dijit.form.FilteringSelect, /* base superclass */ 
     { hasDownArrow:false, storeUrl:"/" } /* mixin */ 
    ], 
    { 
     constructor: function(params, srcNodeRef){ 
     console.debug("Constructing my.FilteringSelect with storeUrl " 
         + this.storeUrl); 
     this.store = new dojox.data.QueryReadStore({url:this.storeUrl}); 
     } 
    } 
); 

Say, je tente de générer déclarative dans la une telle version HTML de my.FilteringSelect:

<input type="text" id="birthplace" name="birthplace" 
     promptMessage="Start typing, and choose among the suggestions" 
     storeUrl="/query/regions" 
     dojoType="my.FilteringSelect" /> 

Cela fait créer un FilteringSelect avec le promptMessage désiré (ce qui signifie que la superclasse reçoit correctement les paramètres), mais hasDownArrow est true (contrairement à mon défaut ms xin) et le store est null (et la console Firebug signale que storeUrl est "undefined").

Qu'est-ce que je fais mal?

Répondre

1

Oups! J'avais vraiment des choses sur la tête. J'ai trouvé le bon chemin. Les travaux suivants:

dojo.provide("my.FilteringSelect"); 
dojo.require("dijit.form.FilteringSelect"); 
dojo.require("dojox.data.QueryReadStore"); 
dojo.declare(
    "my.FilteringSelect", 
    dijit.form.FilteringSelect, 
    { 
     hasDownArrow : false, 
     storeUrl : "/", 
     constructor: function(params, srcNodeRef){ 
     dojo.mixin(this, params); 
     console.debug("Constructing my.FilteringSelect with storeUrl " 
         + this.storeUrl); 
     this.store = new dojox.data.QueryReadStore({url:this.storeUrl}); 
     } 
    } 
); 
Questions connexes