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?
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:)
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.
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 :))
Tags und Links javascript backbone.js internet-explorer-7 hashchange