2011-07-22 76 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重要! 從我瞭解到,JSON對象和模板有聯繫,所以如果我這樣做的「惡行」:

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

模板改變它的內容已經變得甚至之後。 有誰知道是否有辦法阻止這種情況?

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對象和模板沒有鏈接。 「'some_data = {};'」在你到達$'.tmpl(template,some_data).appendTo(「#some_div」);'「之前就被執行了,因爲'$ .get(..)'的回調函數函數(「函數(模板){...}」)是異步的。 –

回答

3

貌似function(template){...}是一個異步回調函數。這意味着你的「惡行」可能會在達到這個功能的內部之前執行。所以當你在函數內部使用some_data時,它已經是空的了。

重構到:

http://jsfiddle.net/dq9es/

將解決這一問題

+0

嘿布蘭登!感謝您的回覆。你會看到......你對異步是正確的,但它是$ .get函數而不是$ .tmpl。 頭痛消失了! =) –

0

這是因爲當你運行

$.tmpl(template, {}); 

它是通過模板循環的每一塊數據要傳遞它並相應地填補這個div。如果你不傳遞任何數據,它不會通過模板循環並輸出html。

如果你只是想加載靜態HTML,我不認爲模板是解決方案。