2012-04-09 9 views
0

Ich versuche, etwas ziemlich einfaches zu tun.Backbone-Router als/de/# xyz und nicht/# en/xyz

Hier ist das Szenario: Ich habe eine ganze Website funktioniert hervorragend mit Pushstate-fähigen Browsern. Die Website arbeitet die Basis aus, dass die Sprache die „aktuelle Seite“ zum Beispiel ist:

/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 

Es ist wirklich glatt und funktioniert gut mit pushstate wie ich bereits erwähnt. Das Problem ist, wenn ich versuche, den gleichen Router-Code mit der Hash-Alternative zu verwenden.

Backbone Router scheint dies tun zu wollen:

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

, was ich es tun möchte:

/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 

Aber ich kann nicht einen Weg ohne Zwicken Backbones Quelle dies zu implementieren finden . Ich bin irgendwie dagegen, Backbone.js zu ändern, es sei denn, ich muss wirklich wegen des Zukunftssicherheitsfaktors.

Wer hat irgendwelche Gedanken?

Antwort

5

Sie benötigen die root Option im Backbone History object:

Quote die Dokumentation verwenden:

Wenn Ihre Anwendung nicht von der Wurzel-URL/Ihrer Domäne ist, müssen Sie Geschichte zu erzählen, wo die Wurzel wirklich ist, als Option: Backbone.history.start({pushState: true, root: "/public/search/"})

Sie gehen zu müssen, einige Code zu tun, die auf der Zielseite geschieht, die an schaut welcher Sprache sie verwenden, und dann se Nds sie zu /[LANG CODE]/. Dann ordnen Sie auf Ihrem Server Anfragen für /[LANG CODE]/ nur Ihrer .html-Datei zu.

In Ihrer HTML-Datei betrachten Sie die location.pathname Variable, entfernen Sie den ersten /[LANG CODE]/ Teil und verwenden Sie diesen als root Wert für die Optionen Hash.

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

Dies wird Ihr URLs dazu führen, dass:

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

hey danke nochmal für mich gerettet tkone! Ich werde bald anfangen, Ihnen Banknoten anstelle von Punkten zu schicken ;-) – Alex

+0

@Alex haha ​​kein Problem. Stehe gerne zur Verfügung! – tkone