0

私はかなり単純なことをしようとしています。

シナリオは次のとおりです。プッシュステート対応のブラウザーでサイト全体がうまく機能しています。サイトは、言語が「実際のページ」であることに基づいて機能します。たとえば、次のようになります。

/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

しかし、これを実装するためにバックボーンのソースを微調整しないと方法が見つかりません。将来を保証するという理由で本当に必要な場合を除き、backbone.js の変更には反対です。

誰にも考えはありますか?

4

1 に答える 1

5

Backboneオブジェクトrootでオプションを使用する必要があります。History

ドキュメントを引用します:

アプリケーションがドメインのルート URL / から提供されていない場合は、オプションとして、ルートが実際にどこにあるかを History に伝えてください。Backbone.history.start({pushState: true, root: "/public/search/"})

ランディング ページで発生するコードを実行して、ユーザーが使用している言語を調べてから に送信する必要があり/[LANG CODE]/ます。次に、サーバーで、リクエストを/[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
于 2012-04-09T16:25:36.967 に答える