Dojo: Vererbung mit Standardwert - das mixin nicht passiert
-
21-08-2019 - |
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 auffalse
(statt der Standardtrue
) und - gibt es eine zusätzliche mögliche Eigenschaft
storeUrl
die mir dieFilteringSelect
an den entsprechendenQueryReadStore
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?
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});
}
}
);