Domanda

Vorrei dichiarare una nuova classe dojo eredita da una classe dojo esistente, ma con la mia scelta di valori predefiniti per le proprietà della classe. (L'utente può comunque ignorare questi valori.)

I dichiaro la mia versione del dijit.form.FilteringSelect tale che:

  • le hasDownArrow default di proprietà di false (piuttosto che lo standard true) e
  • c'è una proprietà più possibile storeUrl che mi permette di collegare il FilteringSelect al corrispondente QueryReadStore.

Ecco quello che ho fatto, senza successo:

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});
      }
   }
);

Di ', provo a generare in modo dichiarativo nel codice HTML come una versione di my.FilteringSelect:

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

Questa sarà davvero creare un promptMessage con il desiderato store (il che significa che la superclasse è sempre correttamente il params), ma è null undefined (contrariamente al mio mixin default) e il <=> è <=> (e la console Firebug riporta che <=> è "<=>").

Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione

Oops! Ho avuto davvero le cose sulla loro testa. Ho trovato il modo giusto intorno. Le seguenti opere:

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});
      }
   }
);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top