2011-02-15 17 views
5

Ho scritto una funzione che recupera un modello html, quindi associa i dati utilizzando jQuery.tmpl. Penso che sia abbastanza pulito e ordinato e incapsula ciò di cui ho bisogno e mi fornisce una funzione riutilizzabile. La mia domanda tuttavia è che può essere migliorata.Richiamata nella funzione wrapper jQuery

La mia preoccupazione principale è cosa succede se il metodo $ .get fallisce, e anche come viene eseguita la funzione 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

Suggerisco di cambiare il nome della funzione per evitare di confondere con Function.bind https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind e la funzione jQuery.bind. – hamczu

+0

Grazie per l'heads-up. Comunque lo inserirò in uno spazio dei nomi. –

risposta

1

È possibile passare il risultato di tmpl() direttamente al html() per cancellare il vostro contenitore di destinazione e aggiungere nuovi contenuti allo stesso tempo. È inoltre possibile concatenare il risultato di $.get() nel vostro success gestore per evitare l'uso di una variabile locale:

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

Se $.get() fallisce, non succederà nulla dal momento che non si registra un gestore di errori. Ciò che questo gestore farebbe dipende da te, ma potresti voler visualizzare un messaggio appropriato in una casella di avviso o da qualche parte sulla pagina.

La tua seconda preoccupazione è meno chiara. Allo stato attuale, callBack verrà chiamato solo in caso di successo e senza argomenti.

+0

@hamczu, 'callBack' è attualmente disponibile nell'ambito del gestore' success', perché le funzioni anonime [close over] (http://en.wikipedia.org/wiki/Closure_%28computer_programming%29#JavaScript) variabili locali . E se ci pensate, erano 'callBack' non accessibili, né sarebbe' templateTarget' e 'templateData' :) –

+0

C'è ancora un rischio di condizioni di gara quando si concatenano i metodi di successo/errore/completo? Il motivo per cui ho posto la domanda originale è che sto cercando di spostare le persone dall'utilizzo di UpdatePanels (.NET). E sto cercando di renderlo il più semplice possibile per loro (anche se voglio ancora che capiscano come funziona tutto questo). –

+1

@Jamie, ho appena controllato e sembra che abbia letto male i documenti: la registrazione dei gestori sembra solo essere una convenzione, non una regola, e non può esserci alcuna condizione di competizione poiché l'oggetto 'jqXHR' supporta l'operazione differita. Risposta aggiornata, scusa per il problema: | –

0

È possibile utilizzare $ .ajax per assegnare e errore calback. es:

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

Controllare l'API http://api.jquery.com/jQuery.ajax/

Problemi correlati