/ / Dojo. Come aggiungere attributi negli elementi del modulo? - javascript, django, dojo

Dojo. Come aggiungere attributi negli elementi del modulo? - javascript, django, dojo

Ho una forma in cui i widget sono instillati usando la sintassi dichiarativa.

<script>
require(["dojo/parser",
"dijit/form/Form",
"dijit/form/Button",
"dijit/form/ValidationTextBox",
"dijit/form/DateTextBox" ,
"dojox/validate/web",
"dojox/form/PasswordValidator",
"dijit/form/FilteringSelect" ,
"dijit/form/Button",
"dijit/form/Select",
"dojo/dom",
"dojo/dom-attr"

]);

<div data-dojo-type="dijit/form/Form" id="signupForm" data-dojo-id="signupForm"
encType="multipart/form-data" action="" method="">
<input type="hidden" name="csrfmiddlewaretoken" value="xxxxxxxxxxxx" />

<label for="id_username">Username:</label>
<input autofocus="autofocus" data-dojo-type="dijit/form/ValidationTextBox" id="id_username" maxlength="30" name="username" placeholder="Username" type="text" />

Questo modulo è stato creato da un modello django e iovorrebbe utilizzare il django SelectDateWidget che visualizza tre widget per data, mese e anno. Il problema è che non è possibile visualizzare questi campi separatamente nel modello. Devo aggiungere gli attributi dojo dopo che sono stati caricati nel browser. Qualcosa di simile a

<script>
dojo.attr(dom.byId("id_birth_date_month"), {data-dojo-type:"dijit/form/Select", data-dojo-id:"monthSelect"});
dojo.attr(dom.byId("id_birth_date_year"), {data-dojo-type:"dijit/form/Select", data-dojo-id:"monthSelect"});
</script>

il suddetto lavoro non funziona, come posso farlo?

risposte:

1 per risposta № 1

Ho trovato due modi per farlo. Spero che aiutino qualcun altro.

Prima il modo dojo

<script>
require(["dojo/parser",
"dijit/form/Select",
"dojo/dom"], function (parser, Select, dom) {
dojo.attr(dom.byId("id_birth_date_month"), {"data-dojo-type":dijit/form/Select",
"data-dojo-id": "monthSelect"});
// similar lines for day and year
});
</script>

<!-- ...later in the code-->
<select  id="id_birth_date_month">
...
</select>

<!-- two other similar selects for day and year-->

Questo è un modulo che viene caricato all'interno di un riquadro mobile in modo che parser.parse () ecc. Sia già in esecuzione. Non sono sicuro del perché la sintassi dichiarativa funzioni dopo l'analisi, ma questo approccio ha funzionato.

Il secondo modo è da Django. Definire gli attributi nel campo modulo stesso. Questo è l'approccio che ho preso.

class SignupForm(Form):

# other form fields
birth_date = DateField(widget=SelectDateWidget(years=range(yearNow - 13, yearNow - 100, -1),attrs={"data-dojo-type": "dijit/form/Select", "data-dojo-id": "birthDateSelect"}), required=True, initial="", label=_("Birth Date"))
# other form fields

Purtroppo tutti e tre i campi (anno, mese giorno) ottengono lo stesso dato-dojo-id e non so se questo è un problema, per ora funziona e non vedo nulla di strano.