2011-02-15 32 views
5

Bir html şablonu alan ve jQuery.tmpl kullanarak verileri bağlayan bir işlev yazdım. Oldukça düzgün ve düzenli olduğunu ve ihtiyacım olan şeyleri kapsandığını ve yeniden kullanılabilir bir işlev sağladığını düşünüyorum. Benim sorum yine de geliştirilebilir.jQuery sarıcı işlevinde geri arama

Temel endişem, $ .get yönteminin başarısız olması durumunda ve ayrıca callBack işlevinin nasıl yürütüldüğü.

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

i Function.bind https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind ve jQuery.bind fonksiyonu ile kafa karıştırıcı önlemek için fonksiyon adını değiştirmek düşündürmektedir. – hamczu

+0

Başlıklar için teşekkürler. Yine de bunu bir isim-alanı içinde bıraktım. –

cevap

1

Eğer hedef konteyner temizlemek ve aynı zamanda yeni içerik eklemek için tmpl() doğrudan html() için sonucunu geçebilir. Ayrıca yerel bir değişken kullanarak önlemek için success işleyicisi içine $.get() sonucunu zincir edebilirsiniz: $.get() başarısız olursa bir hata işleyicisi kayıt olmadığı için

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

, hiçbir şey olmaz. Bu işleyicinin size yapabileceği şey, ancak bir uyarı kutusuna veya sayfanın başka bir yerinde uygun bir mesaj görüntülemek isteyebilirsiniz.

İkinci endişeniz daha az açık. Bu haliyle, callBack sadece başarı ve argümanlar olmadan çağrılacaktır.

+0

@hamczu, 'callBack' aslında 'başarı' işleyicisi kapsamında kullanılabilir, çünkü anonim işlevler [close over] (http://en.wikipedia.org/wiki/Closure_%28computer_programming%29#JavaScript) yerel değişkenler . Ve bunun hakkında düşünürseniz, 'callBack' erişilemedi, ne de 'templateTarget' ve 'templateData' olacaktı :) –

+0

Başarı/hata/tam yöntemleri zincirleme sırasında hala bir yarış durumu riski var mı? Özgün sorumu sormamın nedeni, insanları UpdatePanels (.NET) kullanmasını engellemeye çalışıyorum. Ve onları mümkün olduğunca kolaylaştırmaya çalışıyorum (yine de bunların hepsinin nasıl çalıştığını anlamasını istiyorum). –

+1

@Jamie, Sadece iki kez kontrol ettim ve dokümanları yanlış okudum gibi görünüyor: İşleyicileri hemen kaydetme sadece kural değil, bir kural gibi görünüyor ve jqXHR'nin nesnesi ertelenmiş işlemi desteklediği için herhangi bir yarış durumu söz konusu olamaz. Yanıt güncellendi, sorun için özür dilerim: | –

0

$ .ajax öğesini, atamayı atamak ve hata vermek için kullanabilirsiniz. örn:

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

Kontrol api http://api.jquery.com/jQuery.ajax/