2011-02-15 10 views
5

He escrito una función que recupera una plantilla html, a continuación, se une de datos utilizando jQuery.tmpl. Creo que es bastante limpio y ordenado, encapsula lo que necesito y me proporciona una función reutilizable. Mi pregunta, sin embargo, es si puede mejorarse.de devolución de llamada en función de contenedor jQuery

Mi principal preocupación es si el método $ .get falla, y también cómo se ejecuta la función callBack.

function Bind(templateURL, templateData, templateTarget, callBack){ 
var req = $.get(templateURL); 
    req.success(function(templateHtml) { 
     $(templateTarget).html(''); //clear 
     $(templateHtml).tmpl(templateData).appendTo(templateTarget); //add deal 
    callBack(); 
    }); 
} 
+0

Sugiero cambiar el nombre de la función para evitar confundir con Function.bind https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind y función jQuery.bind. – hamczu

+0

Gracias por el aviso. Sin embargo, insertaría esto dentro de un espacio de nombres. –

Respuesta

1

Puede pasar el resultado de tmpl() directamente a html() para despejar su contenedor de destino y añadir el nuevo contenido al mismo tiempo. También puede encadenar el resultado de $.get()success en su manejador de evitar el uso de una variable local:

function Bind(templateURL, templateData, templateTarget, callBack) 
{ 
    $.get(templateURL).success(function(templateHtml) { 
     $(templateTarget).html($(templateHtml).tmpl(templateData)); 
     callBack(); 
    }); 
} 

Si $.get() falla, no pasará nada, ya no se registra un controlador de errores. Lo que ese manejador haría depende de usted, pero es posible que desee mostrar un mensaje apropiado en un cuadro de alerta o en algún lugar de la página.

Su segunda preocupación es menos clara. Tal como está, callBack solo se ejecutará cuando tenga éxito y sin argumentos.

+0

@hamczu, 'callBack' es realmente disponible en el alcance de la' manejador Success', porque las funciones anónimas [cerrar sobre] (http://en.wikipedia.org/wiki/Closure_%28computer_programming%29#JavaScript) variables locales . Y si lo piensas, no se pudo acceder a 'callBack', ni sería 'templateTarget' y' templateData' :) –

+0

¿Existe todavía un riesgo de condición de carrera al encadenar los métodos de éxito/error/completo? La razón por la que hice la pregunta original es porque estoy tratando de alejar a las personas del uso de UpdatePanels (.NET). Y trato de hacer que sea lo más fácil posible para ellos (aunque todavía quiero que entiendan cómo funciona todo esto). –

+1

@Jamie, acabo comprobó dos veces y parece que leí mal la documentación: el registro de los manipuladores de inmediato sólo parece ser una convención, no una regla, y no puede haber una condición de carrera ya que el objeto 'jqXHR' soporta la operación diferida. Respuesta actualizada, perdón por el problema: | –

0

Puede usar $ .ajax para asignar y corregir errores. por ejemplo:

var jqxhr = $.ajax({ url: "example.php" }) 
    .success(function() { alert("success"); }) 
    .error(function() { alert("error"); }) 

Comprobar la API http://api.jquery.com/jQuery.ajax/

Cuestiones relacionadas