2012-11-06 4 views
6

私のサイトでは、Backbone.jsでプッシュステートが実装されたばかりで、IE全体でサイトが破損しています。 IEのフォールバックを作成するにはどうすればよいですか?Backbone.js PushStates:Internet Explorerのフォールバックが機能しない

私は

メインURLを達成しようとしています何:http://mydomain.com/explore

別のURL:'http://mydomain.com/explore/1234

サイトのメインページは、ルータ機能exploreをトリガーhttp://mydomain.com/exploreです。

ときにユーザが訪問http://mydomain.com/explore/1234、バックボーンのルータは、機能exploreと同じであるが、アイテムID 1234の詳細を含む機能viewListingをトリガします。

BACKBONE.JSルータ

// Router 
var AppRouter = Backbone.Router.extend({ 
    routes: { 
     'explore': 'explore', 
     'explore/:id': 'viewListing', 
    }, 

    explore: function() { 
     this.listingList = new ListingCollection(); 
     // More code here 
    }, 

    viewListing: function(listing_id) { 
     this.featuredListingId = listing_id; // Sent along with fetch() in this.explore() 
     this.explore(); 
    } 
}); 

App = new AppRouter(); 

// Enable pushState for compatible browsers 
var enablePushState = true; 

// Disable for older browsers (IE8, IE9 etc) 
var pushState = !!(enablePushState && window.history && window.history.pushState); 

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

問題:あなたは上記のコードで見ることができるように、私はそれが互換性のないブラウザの場合pushState: falseでpushstatesを無効にしてみました。

IEは通常のブラウザ(http://mydomain.com/explore)で正常に動作するものにアクセスするために、IEはhttp://mydomain.com/explore/#exploreに移動する必要があり、混乱させてしまいます。さらにアクセスするにはhttp://mydomain.com/explore/1234にアクセスする必要があります。http://mydomain.com/explore/#explore/1234

これはどのように修正する必要がありますか?

答えて

2

http://mydomain.com/explore/#explore urlを使用しない場合は、 http://mydomain.com/#exploreにリダイレクトする必要があります。代わりに、バックボーンが開始されます。

if(!pushState && window.location.pathname != "/") { 
    window.location.replace("/#" + window.location.pathname) 
} 

UPD:あなたはおそらくハッシュwindow.location.pathname.substr(1)

UPD2としてパスを設定する際に先頭のスラッシュを削除する必要があります:あなたは/explore/があなたの基幹路線のルートになりたいならば、あなたはそれを除外しなければなりません路線からとHistory.start({root: "/explore/"})

routes: { 
    '': 'explore', 
    ':id': 'viewListing', 
} 
+0

おかげでルートとして設定され、私はこれを試してみましたが、それは 'HTTPから(予想通り)リダイレクト:http://mydomain.com/#'に// mydomain.com/explore'/explore'。しかし、http:// mydomain.comはウェルカム/スプラッシュページであり、アプリケーションページではありません(http:// mydomain.com/explore') – Nyxynyx

+0

あなたはおそらくバックボーンルートから '/ explore /'を削除する必要があります'Backbone.history.start({root: '/ explore /'})'のルートとして設定します。 –

関連する問題