8

バックエンドに CodeIgniter を、フロントエンドに Backbone.js を使用して Web アプリを開発しています。また、HTML5 Boilerplate を開始テンプレートとして使用しています。

アプリケーションのメイン ナビゲーションとして Backbone の Controller と History を使用しています。私は過去に一度それを行いましたが、すべて正常に機能しています。問題は、Backbone.History.start() で hashchange イベント キャプチャを開始し、リンク example.com/#home をクリックすると、URL のハッシュが変更され、イベントが発生しますが、2 秒後にハッシュがクリアされることです。 from url で、javascript エラーがスローされるのは ie7 のみです。

ソースコードを調べたところ、ハッシュ値の変更を確認する間隔を実行するIFRAMEを作成することにより、IE7でhashchangeイベントが達成されました。

以前にこの奇妙なバグがあり、これを解決する方法を知っている人はいますか?

4

4 に答える 4

4

Backboneを使用して#hashベースアプリケーションを処理する正しい方法は、Backbone.history.saveLocation(hash)およびBackbone.history.loadUrl()の後に、コントローラーのルーティングを有効にするようです。

私は以前にこれを知っていました...この素晴らしいMVCライブラリを楽しんでください:)

于 2011-02-15T15:38:56.347 に答える
3

私が見つけた解決策は、Ben Alman のhashchange pluginを使用することでした。Backbone.History の start 関数に移動し、start 関数のコードをこれに置き換えます。

開始:関数(){
    $(window).hashchange(this.checkUrl);
    this.loadUrl() を返します。
}

また、必ずコードに hashchange プラグイン ファイルを含めてください。

于 2011-05-31T21:21:54.747 に答える
2

ハッシュ URL をクリックしても、実際には IE に履歴エントリは保存されません。Backbone のsaveLocation機能を使用して、戻りたい場所のマーカーをドロップします。完全なスクープについては、次を参照してください。

http://documentcloud.github.com/backbone/#Controller-saveLocation

于 2011-02-14T14:14:56.583 に答える
1

公式の問題リストで、Jon Leighton からこの問題の解決策を見つけました: https://github.com/documentcloud/backbone/issues/228

公式パッチが適用されるまで、これを backbone.js に追加します (Backbone 0.3.3 の 689 行目)。

this.iframe.document.open().close();
this.iframe.location.hash = window.location.hash;

次の行の後:

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

(完全な i-frame タグ < & /> を書くことができませんでした - ここでは許可されていません :))

于 2011-04-28T09:14:36.843 に答える