2012-04-14 13 views
10

Mam następujący problem. Część mojej aplikacji Backbone ma url podobny:Backbone.js i wiodąca tablica asocjacyjna

site.ru/#profile 

Gdy strona jest ładowana zmiany adresu URL do:

site.ru/profile 

Tak, hash zaginął. Tak więc widzę problem w funkcji nawigacji Backbone:

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

Jak rozumiem ten kod, wyczyść skrót na początku adresu URL.

Czy to jest prawdziwy sposób na proste usunięcie tego wiersza kodu w celu rozwiązania problemu? Czy możesz mi doradzić kilka innych sposobów, aby to naprawić.

TIA!

Odpowiedz

12

Szkielet usuwa tylko skrót, jeśli włączysz funkcję pushState.

Zmień Backbone.history.start({pushState: true}); do Backbone.history.start();

http://backbonejs.org/#Router

+0

tak, używam pushState = true. Czy mogę usunąć pushState, co tracę? – dizpers

+0

Wszystkie elementy sterujące pushState mają zastosowanie w przypadku adresów URL opartych na hashach, a nie w przeglądarkach obsługujących interfejs History API. – abraham

0

Wydaje backbone.js korzysta / & # jako ograniczniki, aby wysunąć adresu root'em & podkatalogów. Filtrowanie wymaga tp stau tp, aby uzyskać "fragment". Spróbuj po prostu usunąć # w tym RegEx, ale zostaw resztę linii tam. (& zostaw komentarz w kodzie, który zrobiłeś! :)

Chciałbym również przesłać raport o błędzie, ponieważ jest to ponowne wysłanie linku bez skrótu.

+0

BTW, powinieneś oznaczyć ten JavaScript również i być może RegEx. – tomByrer

+3

Możesz użyć Backbone.history.start ({pushState: true, hashChange: false}); zachować pushState i nadal używać skrótów – TYRONEMICHAEL

0

mających ten sam problem, i kilka innych z nami ;-) (patrz GitHub issue)

Naprawiłem to teraz przez nie słuchać hash zmiany, jak na przykład:

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

To wydawało się działać dla mnie.