Pergunta

Quero declarar uma nova classe dojo herdando de uma classe dojo existente, mas com a minha própria escolha de valores padrão para propriedades da classe. (O usuário ainda pode substituir esses valores.)

Eu estou declarando a minha própria versão do dijit.form.FilteringSelect tal que:

  • os padrões de propriedade hasDownArrow para false (em vez do true padrão) e
  • há uma storeUrl propriedade possível extra que me permite conectar o FilteringSelect ao QueryReadStore correspondente.

Aqui está o que eu fiz, sem sucesso:

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, I tentar gerar declarativa no HTML como uma versão do my.FilteringSelect:

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

Este vai realmente criar um FilteringSelect com o promptMessage desejado (o que significa que a superclasse está recebendo corretamente os parâmetros), mas hasDownArrow é true (ao contrário do meu mixin padrão) eo store é null (e os relatórios console do Firebug que storeUrl é "undefined").

O que estou fazendo de errado?

Foi útil?

Solução

Ops! Eu realmente tinha coisas em sua cabeça. Eu encontrei o caminho em torno da direita. As seguintes 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top