2012-11-06 29 views
6

काम नहीं कर रहा है मेरी साइट ने बैकबोन.जेएस में पुशस्टेट्स को लागू किया है और आईई के लिए पूरी साइट ब्रेक लगाई है। मैं आईई के लिए फॉलबैक कैसे बनाना चाहिए?Backbone.js पुशस्टेट्स: इंटरनेट एक्सप्लोरर के लिए फ़ॉलबैक

मैं क्या हासिल करने के लिए

मुख्य यूआरएल कोशिश कर रहा हूँ: http://mydomain.com/explore

एक और यूआरएल: 'http://mydomain.com/explore/1234

साइट के मुख्य पृष्ठ http://mydomain.com/explore जो रूटर समारोह explore से चलाता है।

जब कोई उपयोगकर्ता http://mydomain.com/explore/1234, रीढ़ की रूटर समारोह viewListing, जो समारोह explore रूप में ही है, लेकिन यह भी आइटम आईडी 1234 के लिए विवरण शामिल हैं ट्रिगर किया जाएगा।

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 निष्क्रिय करने के लिए अगर यह एक असंगत ब्राउज़र है की कोशिश की।

हालांकि आईई के लिए सामान्य रूप से सामान्य ब्राउज़र (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 यूआरएल नहीं करना चाहते हैं, तो आप http://mydomain.com/#explore पर रीडायरेक्ट करने तो रीढ़ बजाय इसे के साथ शुरू होगा।

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

युपीडी: अगर आप चाहते हैं /explore/ अपने रीढ़ मार्गों के लिए रूट तो आप इसे बाहर करने के लिए करना पड़ रहा है: आप शायद जब एक हैश के रूप में पथ की स्थापना window.location.pathname.substr(1)

UPD2 अग्रणी स्लैश को दूर करना होगा मार्गों से और में History.start({root: "/explore/"})

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

धन्यवाद एक रूट के रूप में स्थापित है, मैं इस कोशिश की और यह (उम्मीद के रूप में) 'http से पुनर्निर्देश: // mydomain.com/explore' http://mydomain.com/#' करने के लिए/explore'। हालांकि 'http: // mydomain.com' स्वागत/स्प्लैश पृष्ठ है, न कि ऐप पेज (' http: // mydomain.com/explore') – Nyxynyx

+0

तो आपको शायद अपने बैकबोन मार्गों से '/ explore /' को हटाना होगा , इसे 'Backbone.history.start ({root:'/explore/'} में रूट के रूप में सेट करें) '। –