/ / Dojo. Jak dodawać atrybuty w elementach formularza? - javascript, django, dojo

Dojo. Jak dodawać atrybuty w elementach formularza? - javascript, django, dojo

Mam formę, w której widżety są instalowane przy użyciu deklaratywnej składni.

<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" />

Ten formularz jest zbudowany z szablonu django i jachciałby użyć django SelectDateWidget, który wyświetla trzy widżety dla daty, miesiąca i roku. Problem polega na tym, że nie można wyświetlić tych pól osobno w szablonie. Muszę dodać atrybuty dojo po ich załadowaniu do przeglądarki. Coś jak

<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>

powyższy offcourse nie działa. Jak mogę to zrobić?

Odpowiedzi:

1 dla odpowiedzi № 1

Znalazłem dwa sposoby, aby to zrobić. Mam nadzieję, że pomogą komuś innemu.

Najpierw sposób 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-->

Jest to forma, która jest ładowana w pływającym okienku, więc parser.parse () itp. Już działa. Nie jestem pewien, dlaczego składnia deklaratywna działa po parsowaniu, ale to podejście zadziałało.

Drugi sposób jest z django. Zdefiniuj atrybuty w samym polu formularza. To jest moje podejście.

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

Niestety wszystkie trzy pola (rok, dzień miesiąca) otrzymują ten sam identyfikator dojo-danych i nie wiem, czy to jest problem. Na razie działa i nie widzę nic dziwnego.