Backbone.js :solution de contournement pour implémenter une URL basée sur une barre oblique à l'aide de pushstate dans Internet Explorer

StackOverflow https://stackoverflow.com/questions/9428832

Question

J'ai complètement gâché les choses en ce moment.J'ai mis à jour vers Backbone.js 0.9.1, mis à jour vers des URL basées sur des barres obliques et commencé à utiliser pushstate:true.5 jours plus tard, je teste mon application sur IE9 et les URL ne collent tout simplement pas à la page vers laquelle elles renvoient.

J'ai fait quelque chose comme ceci :

main.html

<a href="/signup">Do Signup</a>

Le navigateur va à mydomain.com/signup pendant une seconde, puis revient au main.html avec l'URL mydomain.com/#signup.

Revenir à pushstate:true résout le problème des liens simples mais décompose les éléments pour lesquels j'ai défini le routeur pour avoir des itinéraires comme...

SignupRouter = Backbone.Router.extend({
  routes: {
    'signup': 'signup',
    'signup/:key': 'confirm'
  }, initialize: function() {
    // do some stuff here
  }, signup: function() {
    // signup view
  }, confirm: function() {
    // confirm view
  }
});

Si je n'utilise pas pushstate, je dois revenir à la stratégie consistant à créer une route distincte pour chaque page et à charger le routeur en fonction d'une variable côté serveur (très primitive je sais) :

SignupRouter = Backbone.Router.extend({
  initialize: function() {
    // signup view
  }
});

ConfirmSignupRouter = Backbone.Router.extend({
  initialize: function() {
    // confirm view
  }
});

Existe-t-il un moyen convivial pour IE de procéder (IE7 ~ 9) ?Une solution de contournement côté serveur ?Rien?

Était-ce utile?

La solution

Si la désactivation de pushState le fait fonctionner dans les navigateurs qui ne le prennent pas en charge, essayez d'utiliser le test PushState du backbone pour le désactiver de manière préventive (ce code est basé sur la variable _hasPushState dans la source Backbone) :

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

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

Backbone.history.start({ pushState: pushState });
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top