-1

ロケーションハッシュの内容を文字列にマップしたい。マッピングは、以下のパターンに基づいている必要があります (:Placeholder は任意の数値、おそらく 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 ステートメントが最善の方法であるかどうかはわかりません。また、正規表現もあまり知りません。助けや洞察をありがとう。

4

1 に答える 1

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)];
于 2012-11-26T14:55:58.223 に答える