Backbone.js verursacht nur in IE7 einen Fehler

8

Ich entwickle eine Web-App mit CodeIgniter auf Back-End und Backbone.js auf Front-End. Ich verwende auch HTML5 Boilerplate als meine Startvorlage.

Ich benutze Backbones Controller und Verlauf als Hauptnavigation durch meine Anwendung. Ich habe es einmal in der Vergangenheit gemacht und alles funktioniert gut. Das Problem ist, wenn ich hashchange Ereignis erfassen mit Backbone.History.start () und klicken Sie auf einen Link example.com/#home, die Änderung des Hash in der URL, das Ereignis wird ausgelöst, aber 2 Sekunden nach, der Hash wird gelöscht von URL und ein Javascript-Fehler wird nur in ie7 geworfen.

Ich habe einen Blick auf den Quellcode geworfen und das Hashchange-Ereignis wird in IE7 erreicht, indem ich ein IFRAME erzeuge, das ein Intervall ausführt, um die Änderung des Hashwertes zu überprüfen.

Jeder hatte diesen seltsamen Bug vorher und weiß, wie man das löst?

    
Dominic Mercier 11.02.2011, 20:52
quelle

4 Antworten

4

Der richtige Weg, um eine #hash-Basisanwendung mit Backbone zu behandeln, scheint Backbone.history.saveLocation (Hash) und nach Backbone.history.loadUrl () zu sein, um Controller-Routing zu ermöglichen.

Ich wüßte das schon vorher ... Viel Spaß mit dieser tollen MVC-Bibliothek:)

    
Dominic Mercier 15.02.2011, 15:38
quelle
3

Die Lösung, die ich gefunden habe, war Ben Almans Hashchange-Plugin . Gehe zur Startfunktion in Backbone.History und ersetze den Code der Startfunktion mit diesem.

%Vor%

Stellen Sie sicher, dass Sie die Hashchange-Plugin-Datei in Ihren Code einfügen.

    
Kyle Buchanan 31.05.2011 21:21
quelle
2

Wenn Sie auf eine Hash-URL klicken, wird ein Verlaufseintrag in IE nicht gespeichert. Verwenden Sie die saveLocation -Funktion von Backbone, um eine Markierung eines Ortes zu löschen, zu dem Sie zurückkehren möchten. Den vollständigen Überblick finden Sie unter:

Ссылка

    
jashkenas 14.02.2011 14:14
quelle
1

Ich fand eine Lösung für dieses Problem von Jon Leighton in der offiziellen Liste der Probleme: Ссылка

Bis zu einem offiziellen Patch fügen Sie dies der backbone.js hinzu (Zeile 689 in Backbone 0.3.3)

%Vor%

nach der folgenden Zeile:

this.iframe = $('iframe src="javascript:0" tabindex="-1" ').hide().appendTo('body')[0].contentWindow;

(Ich konnte nicht das komplette i-frame-Tag schreiben & lt; & amp; / & gt; - es ist hier nicht erlaubt :))

    
Robert Muehsig 28.04.2011 09:14
quelle