2011-02-15 14 views
5

htmlテンプレートを取得し、jQuery.tmplを使用してデータをバインドする関数を記述しました。私はそれがかなりきちんとしてきれいで、私が必要とするものをカプセル化し、私に再利用可能な機能を提供すると思います。しかし、私の質問は改善することができます。jQueryラッパー関数のコールバック

私の主な関心事は、$ .getメソッドが失敗し、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

私はFunction.bind https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind とjQuery.bind機能に混乱を避けるために、関数名を変更示唆しています。 – hamczu

+0

ヘッドアップありがとう。とにかく名前空間内でこれをポップします。 –

答えて

1

を確認してくださいあなたのターゲットコンテナをクリアすると同時に、新しいコンテンツを追加するhtml()に直接tmpl()の結果を渡すことができます。また、ローカル変数を使用しないようにごsuccessハンドラに$.get()の結果をチェーンすることができます

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

$.get()が失敗した場合は、エラーハンドラを登録していないので、何も起こりません。そのハンドラはあなた次第ですが、警告ボックスやページのどこかに適切なメッセージを表示したい場合があります。

あなたの2番目の懸念はあまり明確ではありません。現状では、callBackは引数なしで成功すると呼び出されます。

+0

@hamczu、 'call'は実際には' success'ハンドラのスコープで利用できます。なぜなら、匿名関数[close over](http://en.wikipedia.org/wiki/Closure_%28computer_programming%29#JavaScript)のローカル変数。 'callBack'にアクセスできない場合、' templateTarget'と 'templateData'はどちらもありません:) –

+0

成功/エラー/完了メソッドを連鎖させる際に競合状態のリスクはありますか? 私が元の質問をしたのは、私が人々をUpdatePanels(.NET)を使わなくてはならないからです。そして、私はそれらをできるだけ簡単にしようとしています(しかし、私はまだ彼らがこのすべての仕組みを理解することを望みます)。 –

+1

@Jamie、私はダブルチェックして、私はドキュメントを誤読しているように見えます。ハンドラをただちに登録するのはルールではなく、競合条件がないことがあります。 'jqXHR'オブジェクトは遅延操作をサポートしているからです。回答が更新されました。問題を申し訳ありません:| –

0

$ .ajaxを使用してカルバックを割り当てたり、エラーを計算したりすることができます。例:

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

は、API http://api.jquery.com/jQuery.ajax/

関連する問題