2012-11-26 86 views
-1

我想將位置散列中的內容映射到字符串。映射必須基於下面的模式(:佔位符可以是任意數字,也許是RegEx?)。在函數中處理這個問題的最好方法是什麼?如何將哈希模式映射到字符串值?

'news/:NewsID/dup' => 'newsDuplicate', 
    'news/:NewsID' => 'newsDetail', 
    'news/:NewsID/authors' => 'authorsList', 
    'news/:NewsID/authors/' => 'authorsList', 
    'news/:NewsID/authors/create' => 'authorsCreate', 
    'news/:NewsID/authors/:AuthorID' => 'authorDetail', 
    'news/:NewsID/authors/:AuthorID/orders' => 'orders', 
    'news/:NewsID/authors/:AuthorID/workflow' => 'workflow', 
    'news/:NewsID/authors/:AuthorID/tags' => 'tags' 

我想強調在導航正確的按鈕,並希望像handleNav函數(),這將突顯基於模式右鍵。

例如,當在http://mydomain.com#!news/123/authors/987,那麼我就可以做這樣的事情:

function handleNav() { 
    var current = ?? //get mapped string above 
    $('button.' + current).addClass('active').siblings().removeClass('active'); 
} 

如何獲得基於上述映射「當前」變量?不知道一堆if-else語句是否是最好的方法,我不知道很多正則表達式。感謝您的幫助或見解。

+1

你是什麼意思的「在一個函數」。你爲什麼不製作一個典型的JavaScript對象?你是否想要從位置動態生成值? –

+2

我沒有看到太多的模式 –

+0

這是爲骨幹路由? –

回答

0

也許在讀取映射之前規範化字符串?像這樣的:

var map = { 
    'news/ID/dup' : 'newsDuplicate', 
    'news/ID' : 'newsDetail', 
    'news/ID/authors' : 'authorsList', 
    'news/ID/authors/' : 'authorsList', 
    'news/ID/authors/create' : 'authorsCreate', 
    'news/ID/authors/:AuthorID' : 'authorDetail', 
    'news/ID/authors/:AuthorID/orders' : 'orders', 
    'news/ID/authors/:AuthorID/workflow' : 'workflow', 
    'news/ID/authors/:AuthorID/tags' : 'tags' 
} 

function normalize(str) { 
    return str.replace(/news\/\d+/,'news/ID') 
} 

var current = map[normalize(url)]; 
+0

太棒了!這給了我一個很好的方向。謝謝! – TruMan1

相關問題