Integrando Django-dynamic-formsets con los botones de radio de JQuery Mobile

Estoy usando Django y el complemento django-dynamic-formset para generar un sitio JQuery Mobile (JQM). Tengo formularios anidados que permiten al usuario hacer clic en un enlace "Agregar" a otra línea del formulario. Esto funciona muy bien sin JQM, pero cuando se usa JQM para diseñar los widgets de formulario, las etiquetas de los botones de opción no activan el botón de opción correcto.

He poner un ejemplo estático del comportamiento, basado en el HTML generado. Haga clic en el enlace "Agregar", luego intente elegir una gravedad para el elemento agregado. Los atributos "para" de las etiquetas parecen actualizarse correctamente, por lo que no sé qué estoy haciendo mal.

La guía de django-dynamic-formset me proporciona una forma de llamar a una función de JavaScript después de que el usuario haga clic en el botón "Agregar", pero no sé si hay un método JQM al que debería llamar para solucionar el problema. Cuando uso la función EnhanceWithin de JQM, activa una carga de página, que envía mi formulario a Django, lo cual no quiero en ese momento porque el formulario aún no se validará.

Editar: Subí un ejemplo mucho mejor a la misma URL.

preguntado el 12 de junio de 12 a las 14:06

1 Respuestas

Después de suficiente cafeína y M&M's de maní, lo he descubierto.

Motivo de la falla: El complemento django-dynamic-formset (DDF) duplica el formulario que le das. Pero el formulario se clona tal cual, lo que ya incluye todo el procesamiento de JQuery Mobile (JQM). Esto hace que JQM lo ignore y hace que los botones de opción se comporten mal.

La solución: El complemento DDF le permite especificar qué formulario clonar por su formTemplate parámetro. JQM le permite desactivar la mejora móvil automática de ciertos elementos. Cree una versión no mejorada de su formulario y pásela a DDF como su formTemplate.

Más detalles: Puse esto codificado en mi cabecera HTML, antes la referencia a JQM:

<script>
    $(document).bind('mobileinit',function(){
        $.mobile.ignoreContentEnabled = true;   // required for using the natural forms
    });
</script>

E incluí este estilo para ocultar mi forma "natural":

<style>
    .natural-form { visibility: hidden; display: none; }
</style>

En el código de Django agregué un <div class='natural-form> y poner una versión ficticia de mi formulario en él (asegurándose de rodearlo con otro <div> con una identificación única para referencia posterior). En mi inicialización de DDF, le doy la ID única como parámetro para formTemplate.

Me dijeron en otro foro que tendría que piratear DDF y JQM para que esto funcione. Estoy impresionado con el diseño de estas dos bibliotecas: lo suficientemente flexible como para que un novato en JQuery pueda colocar todas las piezas en los lugares correctos y sacar algo de ellas.

Respondido el 13 de junio de 12 a las 06:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.