2011-04-02 95 views
1

我有一個單一的模板文件,呈現頁面看起來非常相似,但表現有點不同。我有一個標題和幾個文本框,它們都是由模板語言填充的,並且有一個畫布,其內容實際上可以區分這些頁面。它基本上歸結爲基於我所處的頁面調用不同的JavaScript函數,我不能真正想到一個優雅的(!)方法來做到這一點。如何讓JavaScript知道我在網站上的位置?

我有一個JavaScript文件,它使用jQuery的文檔就緒回調來爲網站添加交互性,並且還可以在畫布中進行繪製。爲此,我必須根據我所在的頁面調用特定的繪圖函數,但在那一點上我不知道。

這當然不是不可能的,我實際上可以想到幾種不同的解決方案,但是並不真的喜歡其中的任何一種。腳本文件不是通過模板引擎運行的,所以我不能在那裏使用任何服務器端的邏輯。我可以在腳本中解析URL,但這聽起來像是對我的一個破解。我也可以在模板文件中的腳本塊中設置一個變量,設置一個隱藏字段的值或類似的東西,但我不認爲這個邏輯也屬於模板。

那麼這通常如何完成?

+0

我可以建議將jQuery標籤添加到您的問題嗎? (也就是說,如果你很高興接受jQuery的答案,顯然,但你似乎已經在使用它了,所以我假設你沒有問題...) – 2011-04-02 20:18:12

+1

當然,添加它。 – futlib 2011-04-03 07:29:15

回答

0

您可以將任何想要的JavaScript嵌入網頁中,並使用與構建網頁相同的服務器端邏輯構建。因此,您可以設置全局變量或(最好)使用包含頁面特定邏輯的參數從.js文件中調用函數。只需提供<script>標籤之間的腳本。

+0

正如你從我的問題中看到的那樣,我已經意識到這個解決方案,但是認爲必須有更好的東西。由於我不太喜歡其他建議,我想我會這樣做,在我的頁面上設置一個全局變量...... – futlib 2011-04-04 12:12:21

0

目前還不清楚您是否想要查找您所在的頁面或給定頁面的DOM中的位置。對於前者,請使用location.hreflocation.pathname以避免解析。

+0

這是真的。想要擁有包含'if(location.href ==「....」)大開關類型語句的通用.js文件,想想太糟糕了:-) – 2011-04-02 20:07:06

+0

這會重複我在我的邏輯servlet,也就是哪個URL引導到客戶端的哪個頁面,我不太喜歡那個。 – futlib 2011-04-04 12:12:58

1

您可以給<body>標記一個「class」值,並且您的JavaScript代碼可以使用該標記(以及其他類似提示)來知道要添加哪種行爲。

例如,你的代碼可以這樣做:

if ($('body').hasClass('image-gallery')) { 
    // ... initialize image gallery code ... 
} 

if ($('body').hasClass('shopping-cart-summary')) { 
    // ... whatever ... 
} 

當然也不必僅僅是個<body>標籤。你的<canvas>也可以獲得一個「類」值(和/或「data-foo」屬性),以將信息傳遞給你的代碼。

相關問題