2010-04-10 20 views
6

Estoy desarrollando una aplicación que usa Asp.net mvc y jquery. Me gustaría usar la misma convención de nomenclatura (clases e ids) para elementos html en diferentes vistas.

En caso de que desee cargar una vista parcial de forma asincrónica, el fragmento de código $ (documento) .ready() en la vista principal pierde su utilidad porque jquery no reconoce ninguna de las etiquetas html y nomenclatura de patial view . Ciertamente no quiero escribir el mismo código para cada vista. ¿Cuál es la mejor manera de resolver este problema?

+0

Agregué una solución que funciona para eventos, que en la mayoría de los casos, ¿también está ejecutando complementos, etc ... si es así puede incluir un poco más sobre lo que necesita ejecutar en el contenido cargado dinámicamente? –

Respuesta

9

Puede utilizar .live() para esto, por ejemplo:

$(".myClass").click(function() { }); 

Se convierte en esto:

$(".myClass").live('click', function() { }); 

.live() funciona de una manera diferente. .click() se une a los elementos que el selector igualó cuando se ejecutó, generalmente document.ready. .live() funciona viviendo en la raíz del DOM, escuchando los eventos para hacer burbujas y ejecutando el controlador si el evento que el objetivo de la burbuja coincide con el selector.

+1

¡funciona para clics! ¿Qué pasa con los complementos que usan los elementos en diferentes vistas parciales? Por ejemplo, el plugin jquery de dataTable() debe funcionar para todos los elementos que tienen una clase = "grilla" independientemente de la vista que provenga de – xantrus

+0

. Si entiendo su pregunta correctamente, eso no es problema. Puede usar $ (". Grid"). Live ([eventname], function() {}) ... en el documento listo para "vincularlo" a cualquier evento en cualquier vista parcial que use. –

+0

@ user252160 - ¿Cómo estás cargando estos '$ .ajax'? –

0

Personalmente, cargo todo el contenido utilizando mis propios contenedores alrededor de $ .post, y lo inicio al contenido cuando sea necesario. Esto también ayuda a unificar los errores de manejo, las notificaciones en espera, etc.

Las bibliotecas de terceros también proporcionan una forma de preprocesar un contenido cargado con javascript.

Las vistas parciales no llamarán a document.ready, pero evaluarán las secuencias de comandos dentro de las etiquetas de script en la cabecera, por lo que así es como puede forzar la invocación de scripts de vista parcial específicos.

Otra forma de usar etiquetas personalizadas html en formularios. P.ej.

<form custom-setup="MyCustomSetupFunc"> 

y mi controlador $ .post buscará esta etiqueta y llamará a esta función, pasando la instancia de formulario. Esto ayuda a reducir el alcance de la secuencia de comandos cuando se carga parcial (útil cuando se pueden cargar varias instancias de parcial en la misma página).

Cuestiones relacionadas