2011-07-22 14 views
2

私は何が起こっているか、非常にわからないんだけど、すべての兆候は、私はこのコードのフラグメントを持っている...この方向に を私を指す:jQueryのテンプレートプラグインとデータの永続性

some_data = {"item":"value"}; 
$.get("some_template.php", function(template) 
{ 
    $.tmpl(template, some_data).appendTo("#some_div"); 

    do_something_else(); 
}); 
//evil line 

と#some_divを取得人が住んでいる...しかし、私はこれを置く: "悪い線"でこれを置く場合:

some_data = {}; 

#some_divは空を示す。 テンプレートプラグインには何らかのデータ永続性がありますか? 私はsome_dataを使用した後に混乱しないと思われますか?

2011-07-22重要!

some_data = {"item":"new value"}; 

テンプレートは、それがレンダリングされた後であっても、コンテンツによる変更:私は「悪の行」でこれを行うので、もし私が学んだことから、 は、JSONオブジェクトとテンプレートが、リンクされています。 これを防ぐ方法があるかどうかは誰にも分かりますか?

SOLUTION!:ブランドン・ブーンの答え 例の私のコメントを参照してください。

some_data = {"item":"value"}; 
$.get("some_template.php", function(template) 
{ 
    $.tmpl(template, some_data).appendTo("#some_div"); 

    some_data = {}; //evil line 

    do_something_else(); 
}); 
+0

私は助けてくれましたが、明確にするために、jsonオブジェクトとテンプレートはリンクされていません。 '$ .get(..)'のコールバックが( '#some_div ')' 'コールバック関数のために' 'some_data = {};' function( "function(template){...}" ")は非同期です。 –

答えて

3

function(template){...}は、非同期コールバック関数であるように見えます。つまり、この関数の内部に達する前に、あなたの "悪い行"が実行される可能性が高いということです。したがって、関数内でsome_dataを使用するときにはすでに空になります。

リファクタリングへ:

http://jsfiddle.net/dq9es/

は、問題を修正します

+0

ちょっとBrandon!お返事をありがとうございます。あなたは非同期について正しいと思うでしょうが、それは$ .tmplではなく$ .get関数です。 頭痛がなくなった! =) –

0

あなたは

$.tmpl(template, {}); 

を実行するとき、それはあなたが渡しているデータごとにテンプレートをループされているのでそれはですそれに応じてdivを埋めます。あなたがそれを渡さないなら、それはテンプレートと出力するHTMLを通してループしていません。

静的なHTMLをロードしようとしているだけの場合は、テンプレートが解決策ではないと思います。