2011-11-14 15 views
0

私はわずかなジレンマを持っています。 これはBACKBONE.JSに一般的ではありませんが、それは確かに働いBackbone.Router.routesを取得し、私の問題を引き起こしている:javascript/backboneにハッシュキーを追加/追加しています

問題: 私は私のjsの中にハードコーディングされたルートの束を持って、これらは、キーと値のペアを追跡しますハッシュパターンは次のようになります。

whatever.route : {"/url/goes/here":"functionNameHere"} 

基本的には、URLが変更されたときに呼び出す関数名にURLをバインドします。

私が持っている問題は、私は、文字列は次のようになりますように、LANG /ロケール文字列でURLを付加する必要があるということです「/ EN/URL//ここに行く」

// this will always return "en" or "fr" or aany 2 letter language code  
var lang = window.location.pathname.split("/")[1].length ==2?window.location.pathname.split("/")[1]:false; 


workspace = new Workspace(//Workspace is basically just a Backbone.router.extend Object 
      { 
       // the routes obj is basically a sequence of routes 
       routes: { 
        "/":     "home", 
        "/home":    "home", 
        "/terms":    "terms", 
        "/news":    "blog", 
        "/news/:title":   "blogpost", 
        "/about":    "about", 
        "/about/partners":  "partners", 
        "/about/people":  "people", 
        "/values/ethics":  "ethics", 
        "/values/innovation": "innovation", 
        "/work":    "work", 
        "/work/process":  "process", 
        "/work/awards":   "awards", 
        "/work/:id":   "workdetail", 
        "/contact":    "contact", 
        "/contact/join":  "joinus", 
        "/contact/enquiries": "enquiries" 
       }, 
       lang : lang 
      } 
     ); 

私のintialの考えでした

....routes{ lang+"/url/goes/here": "functionNameHere", 
... 

なしサイコロエラー 次の私が使用してみてください:

....ルート{evalの(LANG + "/ URLを/ /ここに行く"): "functionNameHere"、の線に沿って...

再び無サイコロ..

確実に動的にオンザフライでハッシュキーを付加する方法をtheresの?

誰でも?

どうもありがとうございました

T.J.へのソリューションのおかげで(下記参照)

誰かがBackbone.jsの特定の方法でこれに興味があれば。 私がしたのは、T.J.次のように私の初期化関数の下で提案:

ニースT.J.Crowder !!

わからない私はORIG [引用符例えば、]

initialize: function(params){ 
     var tmpr = {}; 
     for(var i in params.routes) 
     { 
      tmpr[params.lang+i] = params.routes[i]; 
     } 
     this.routes = tmpr; 
...... 

答えて

1

リテラル(トークンのいずれかである必要があり、オブジェクトリテラルで:の左側の一部または文字列を編集する必要がある場合リテラル[例えば、引用符で])。それは表現であってはなりません。だから、あなたはオブジェクトリテラルでこれを行うことはできません。代わりに、あなたはこれを行う必要があるでしょう:

あり
var routes = {}; 
routes[lang + "/url/goes/here"] = "functionNameHere"; 
// ... 
workspace = new Workspace(
      { 
       routes: routes, 
       lang : lang 
      } 
     ); 

、我々はroutesオブジェクトにプロパティを割り当てるために括弧表記法を使用しています。角括弧付き表記を使用する場合は、式を使用してプロパティ名を決定できます。 JavaScriptのよりクールであまり知られていない機能の1つで、ドット付き表記とリテラルプロパティ名(obj.foo)または括弧付き表記法と文字列プロパティ名(obj["foo"])のいずれかでプロパティにアクセスできます。 (実際には、配列にインデックスを付けるときは、配列にインデックスを付けるときにこれを行うのです。aren't really arrays at allです)

関連する問題