Pregunta

Deseo declarar una nueva clase dojo que hereda de una clase dojo existente, pero con mi propia elección de los valores predeterminados para las propiedades de la clase. (El usuario todavía puede anular esos valores.)

Estoy declarando mi propia versión de la dijit.form.FilteringSelect tal que:

  • los valores predeterminados de propiedad hasDownArrow a false (en lugar de la norma true) y
  • hay una propiedad de los extras posibles storeUrl la que me permite conectar el FilteringSelect a la correspondiente QueryReadStore.

Esto es lo que hice, sin éxito:

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, intento generar de forma declarativa en el código HTML tal versión de my.FilteringSelect:

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

Esto de hecho crear un promptMessage con la deseada store (lo que significa que la superclase está recibiendo correctamente los parametros), pero es null undefined (contrario a mi mixin predeterminado) y el <=> es <=> (y la consola de Firebug informa que <=> es "<=>").

¿Qué estoy haciendo mal?

¿Fue útil?

Solución

¡Huy! Realmente no tenía las cosas en su cabeza. He encontrado el camino a la vuelta. Las siguientes obras:

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});
      }
   }
);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top