2012-04-09 22 views
0

私はかなり簡単なことをしようとしています。バックボーンルータ/ en /#xyzではなく/#en/xyz

ここにシナリオがあります: プッシュステート対応のブラウザでは、サイト全体がうまく機能しています。

/en/whatever/etc = index.en.php with with english headers and encoding & tweaks 
/ar/whatever/etc = index.ar.php with with arabic headers and encoding & tweaks 
/ru/whatever/etc = index.ru.php with with russian headers and encoding & tweaks 

それは本当にツルツルだと私が述べたようにpushstateとうまく動作します:サイトでは、言語は、たとえば、「実際のページ」である根拠をオフに動作します。問題は、私がハッシュの代替と同じルータコードを使用しようとするときです。私はそれがやりたいことはある

/#/en/whatever/etc = bad because it's not based correctly 
/#/ar/whatever/etc = and so on 

バックボーンのルータはこれをしたいようだ

/en/#whatever/etc 
/ar/#whatever/etc 
/ru/#whatever/etc 
..and so on 

or even: 

/en/#/whatever/etc 
/ar/#/whatever/etc 
/ru/#/whatever/etc 
..and so on 

しかし、私はバックボーンにこれを実装するソースを微調整することなく、方法を見つけることができません。私はfutureproofing要因のために本当にしなければバックボーンを変えることに反対している。

誰でも意見はありますか?あなたはBackbone History object:

rootオプションを使用する必要が

答えて

5

は、ドキュメントを引用:

アプリケーションがどこの歴史を伝えるようにしてください、あなたのドメインのルートURLの/から提供されていない場合SEその後、あなたは、彼らが使用しているどのような言語を見てランディングページに起こるいくつかのコードを実行するために必要があるとしているBackbone.history.start({pushState: true, root: "/public/search/"})

、および:ルートは本当にオプションとして、ありますそれらを/[LANG CODE]/にndsします。サーバーでは、/[LANG CODE]/の要求を.htmlファイルにマップするだけです。

HTMLファイルでlocation.pathname変数を調べ、最初の/[LANG CODE]/部分を取り除き、それをオプションハッシュのroot値として使用します。

var lang = "/"+_.first(location.pathname.split('/')+"/"; 
Backbone.history.start({pushState: true, root: lang}); // if you're using pushState, otherwise omit or set to false 

これはあなたのURLが可能になります:

/en/#whatever/etc 
/ru/#whatever/etc 
+0

ちょっとおかげで再び私にtkoneを保存するために!私はすぐにポイントの代わりにあなたに銀行券を送ろうとするつもりです;-) – Alex

+0

@Alexは問題ありません。サービス喜んで! – tkone