Frage

Ich mag eine neue Dojo-Klasse aus einer bestehenden Dojo Klasse erben erklären, aber mit meiner eigenen Wahl des Standardwertes für die Eigenschaften der Klasse. (Der Benutzer kann immer noch die Werte außer Kraft.)

Ich bin meine eigene Version des dijit.form.FilteringSelect erklärt, dass:

  • die hasDownArrow Eigenschaft standardmäßig auf false (statt der Standard true) und
  • gibt es eine zusätzliche mögliche Eigenschaft storeUrl die mir die FilteringSelect an den entsprechenden QueryReadStore anschließen können.

Hier ist, was ich getan habe, ohne Erfolg:

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

Sag mal, ich versuche deklarativ eine solche Version von my.FilteringSelect im HTML zu erzeugen:

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

Dies wird in der Tat eine FilteringSelect mit dem gewünschten promptMessage schaffen (was bedeutet, dass die übergeordnete Klasse richtig die params wird immer), aber hasDownArrow ist true (im Gegensatz zu meinem Standard-mixin) und die store ist null (und die Firebug-Konsole berichtet, dass storeUrl ist "undefined").

Was mache ich falsch?

War es hilfreich?

Lösung

Oops! Ich hatte wirklich Dinge auf dem Kopf. Ich fand den richtigen Weg um. Die folgenden Werke:

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});
      }
   }
);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top