2012-12-05 34 views
0

我使用Ruby on Rails,jQuery v1.8.3和jQuery UI v1.9.2。在一個視圖文件,我渲染局部模板是這樣的:如何處理DOM改變覆蓋一些變量的情況?

<%= render :partial => 'template_name', :locals => { :div_id => 'div_id1' } %> 

相關template_name文件包含以下內容:

<script type="text/javascript"> 
    var item = $('#<%= div_id %>') 

    alert(item.selector) // Display #div_id1 
</script> 

在同一頁上,通過一個AJAX請求,我檢索和增加DOM中的相同部分模板但:locals => { :div_id => 'div_id2' }

<script type="text/javascript"> 
    var item = $('#<%= div_id %>') 

    alert(item.selector) // Display #div_id2 
</script> 

製作上述,第e AJAX請求,由於item#div_id2有關,所以我「丟失」對#div_id1的引用。

我應該如何處理這種情況,以避免「覆蓋」變量?如何「隔離」(也許,命名空間或使用一些jQuery功能)這些變量?

+4

真正的問題是:您正在使用全局變量 – apneadiving

+2

我會避免嘗試將客戶端JavaScript與服務器端輸出混合使用。 –

+0

@apneadiving - 我應該如何讓這些變量爲本地? – user12882

回答

0

如果代碼片段是自包含的,您應該可以將代碼移動到私有範圍。

<script type="text/javascript"> 
    (function(){ 
     var item = $('#<%= div_id %>'); 
     alert(item.selector); // Display #div_id2 
    })(); 
</script> 

雖然我不同意具有服務器端代碼生成基於JavaScript的UI部件。

+0

**你**:雖然我不同意服務器端代碼生成基於JavaScript的用戶界面小部件。 ** I **:有什麼替代方法可以避免這種情況? – user12882

+0

發佈更多關於你的代碼/視圖,並解釋你正在嘗試做什麼。我們可以幫助你重構我猜 – MrYoshiji

+1

@ user12882這很大程度上取決於你的應用程序結構。對於我們所知道的,您可能會被編碼到一個角落裏,這是您唯一的選擇。 –