2012-06-12 48 views
1

我正在開發一個應用程序,我大量使用AJAX調用將部分MVC視圖導入到DOM中。DOM中的全局變量的構建

我注意到一些奇怪的零星行爲,其中的變量將失去他們的狀態。 我希望有人能幫助我確認我爲什麼發生這種情況

懷疑

防爆我有以下的局部視圖: JS:

--begin script tags 
var var1 = 1; 
var var2 = 2; 
var manager = null;  

$(document).ready(function() 
{ 
    //Do stuff 
    manager = new Manager(); 
}); 
--End script tag 

<div> 
Markup in partial view 
</div> 

局部視圖被一遍又一遍的導入我的DOM如果用戶點擊一個按鈕。它每次都插入到相同的元素中,每次都有效地覆蓋自己。 雖然我的問題是:可以多次將此部分加載到DOM中導致腳本塊被添加到我的DOM多次? JS是否會被拋在後面,每次部分視圖被拖入DOM中時都會拋出一次?

劇本已經大大簡化,但一個例子是,管理者可以爲空,它被初始化後還是一樣。我的猜測是,它有可能在DOM多個實例...

好像我可以通過包裝在自整JS調用塊封解決這個問題,但我不知道這是否是必要的......我想知道是否有人對需要關閉的原因有一個很好的解釋。我的理論是,它可以防止在局部視圖腳本塊的多個版本的DOM構建起來......

回答

2

添加由一個自閉調用的腳本在全局命名空間中不引入新的變量,它只定義一個函數,然後調用它,然後立即忘記它,因爲它沒有外部引用。

在另一方面,你的部分觀點介紹每次導入它,覆蓋前面的定義時var1var2並在全局命名空間manager。這可能會解釋您正在經歷的零星變量行爲。

+0

是的我認爲這是問題。像Manager這樣的對象會在執行過程中改變狀態(被初始化等),看起來像關閉是一種正確和安全的方式。 – TGH

+2

實際上,你的$(document).ready(function(){...});應該可以很好地作爲閉包。 –

+0

但是,假設每次都會覆蓋var1和var2是否安全。有沒有重複的機會? – TGH