/ / Dojo. ¿Cómo agregar atributos en elementos de formulario? - javascript, django, dojo

Dojo. ¿Cómo agregar atributos en los elementos del formulario? - javascript, django, dojo

Tengo un formulario donde los widgets se instalan usando la sintaxis declarativa.

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

Este formulario está construido a partir de una plantilla django y yoquisiera usar el django SelectDateWidget que muestra tres widgets para fecha, mes y año. El problema es que no es posible mostrar esos campos por separado en la plantilla. Tengo que agregar atributos dojo después de que se cargan en el navegador. Algo como

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

el curso anterior no funciona. ¿Cómo puedo hacerlo?

Respuestas

1 para la respuesta № 1

Encontré dos formas de hacer esto. Espero que ayuden a alguien más.

Primero el camino del 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-->

Este es un formulario que se carga dentro de un panel flotante para que parser.parse (), etc. ya se haya ejecutado. No estoy seguro de por qué la sintaxis declarativa funciona después de realizar el análisis, pero este enfoque funcionó.

La segunda forma es desde django. Defina los atributos en el propio campo de formulario. Este es el enfoque que tomé.

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

Desafortunadamente, los tres campos (año, mes día) obtienen el mismo ID de dojo de datos y no sé si esto es un problema. Por el momento funciona y no veo nada extraño.