2012-04-14 11 views
10

Ich habe das folgende Problem. Ein Teil meiner Backbone-Anwendung hat URL wie:Backbone.js und führenden Hash

site.ru/#profile 

Wenn die Seite zu URL Änderungen geladen:

site.ru/profile 

So wurde die Hash verloren. So sehe ich das Problem in navigate Funktion von Backbone:

var routeStripper = /^[#\/]/; 
... 
var frag = (fragment || '').replace(routeStripper, ''); 

Als ich diesen Code sauber ein Hash an dem von URL beginnen zu verstehen.

Ist es richtig, diese Codezeile einfach zu löschen, um das Problem zu beheben? Könnten Sie mir andere Möglichkeiten geben, dies zu beheben?

TIA!

Antwort

12

Backbone entfernt nur den Hash, wenn Sie pushState aktivieren.

ändern Backbone.history.start({pushState: true}); zu Backbone.history.start();

http://backbonejs.org/#Router

+0

Ja, ich benutze pushState = true. Wenn ich PushState entferne, was ich verliere? – dizpers

+0

Alle pushState-Steuerelemente dienen dazu, Hash-basierte URLs zu verwenden oder nicht in Browsern, die die Verlaufs-API unterstützen. – abraham

0

scheint Backbone.js / & # als Begrenzungszeichen verwendet, & die Wurzel Adresse ziehen Unterverzeichnisse. Die / Filterung benötigt tp stau tp das "Fragment". Versuchen Sie, nur die # in dieser RegEx zu löschen, aber den Rest der Zeile dort zu lassen. (& hinterlassen Sie einen Kommentar in den Code, den Sie so gemacht haben! :)

Ich würde auch einen Fehlerbericht senden, da es die Verbindung ohne den Hash erneut sendet.

+0

BTW, sollten Sie diese JavaScript auch & vielleicht RegEx taggen. – tomByrer

+3

Sie können Backbone.history.start ({pushState: true, hashChange: false}); pushState zu behalten und trotzdem Hashes zu verwenden – TYRONEMICHAEL

0

das gleiche Problem zu haben, und einige andere mit uns ;-) (siehe GitHub issue)

ich dies nun behoben haben, indem nicht auf Hash hören Änderungen, wie folgt:

Backbone.history.start({ 
    pushState: true, 
    hashChange: false, 
    root: '/' 
}); 

Dies schien für mich zu arbeiten.