2010-01-26 69 views
6

我有一個Web應用程序,它廣泛使用片段標識符來處理「狀態」。URL片段標識符 - 簡化狀態處理(javascript)

examplesite.com/#$mode=direct$aa;map=t;time=2003;vid=4;vid=7 

了一些問題:

1)什麼是分配的各種「的location.hash名稱值對」變量來跟蹤狀態的好辦法?

1A)我應該作出這樣的跟蹤狀態的JS或聲明全局變量對每個名稱值對的對象?

1b)中是否有良好的jQuery插件以簡化這個?

1C)如果我想跟蹤的一些所謂的「顏色」 - 在任何時候都應該把它附加到片段(#),什麼是如果它被定義檢查的正確方法;下面的代碼可以改進嗎?

var color; 

var hashString = location.hash; 
var nvPairs = hashString.split(";"); 
var nvPair = new Array(); 

for (i = 0; i < nvPairs.length; i++) 
{ 
    var keyValuePair = nvPairs[i].split("="); 
    nvPair[keyValuePair[0]] = keyValuePair[1]; 
} 

if (nvPair['color']) color = nvPair['color'];  

1D)由於一些名稱中的示例使用了兩次(「VID」以上) - 我怎麼能輕鬆地存儲它們是獨立的變量?

2)有4個不同的 「哈希」 我要加倍注意:

examplesite.com/ (無散)
examplesite.com/#example=5 (包含「示例」)
examplesite.com/#time=2003;vid=4;vid=7;modified=5 (含有 「改性」)
examplesite.com/#time=2003;vid=4; vid = 7 (不包含「修改」或「示例」)

如何編寫一個控制結構,在應用程序加載並檢查上述條件時從哈希中提取變量?

3)如何能在以前的狀態/ s的存儲和按下後退按鈕時,如何觸發狀態的改變?

回答

2

我只想用包含數組的對象,而不是數組。代碼看起來像這樣:

var color; 

var keyValuePair, 
    hashString = location.hash, 
    nvPairs = hashString.split(";"), 
    nvPair = {}; 

for (var i = 0; i < nvPairs.length; ++i){ 
    keyValuePair = nvPairs[i].split("="); 
    if (keyValuePair[0] in nvPair) 
     nvPair[keyValuePair[0]].push(keyValuePair[1]); 
    else 
     nvPair[keyValuePair[0]] = [keyValuePair[1]]; 
} 

if ('color' in nvPair) color = nvPair['color'][0]; 
+0

好主意,謝謝你的輸入 - 真的很有幫助。 – dani 2010-01-31 12:18:24

1

我相信距離Ben Alman燒烤可以幫助你:http://benalman.com/projects/jquery-bbq-plugin/

+0

謝謝,我檢查了這一個,但它似乎沒有與給出的示例哈希字符串... – dani 2010-01-26 13:32:57

+1

更新:如果「;」有效被替換爲「&」 - 一個偉大的插件! – dani 2010-01-27 11:43:26

+0

沒問題。然後你可以關閉這個問題。 – jerone 2010-01-27 15:45:07