2014-07-06 3 views
2

Le serveur Node.js a deux rôles:amélioration progressive - Node.js, Backbone.js

  • API RESTful sur les routes avec le préfixe/api
  • Renders pages du site sur les routes autres (//plans/caractéristiques/termes ...)

Pour l'instant, toutes mes pages affichent une "page de chargement ..." combinée avec l'application Backbone qui remplace le DOM au démarrage de Backbone.router.

Je voudrais créer les pages du site Web côté serveur lorsqu'un utilisateur accède à une page et que Backbone gère la partie suivante de la navigation lorsque l'utilisateur navigue sur le site Web.

Je sais comment le faire côté serveur mais côté client lorsqu'une page est chargée avec le DOM déjà construit, le Backbone.router charge puis remplace le DOM car il ne sait pas que la vue est déjà préchargée.

Comment le réparer côté client?

code:

Mise à jour: le nouveau code: https://gist.github.com/mathieug/d50c861e63dd647f1c2b
Maintenant, j'ai besoin de la méthode runSlider à appeler au premier chargement.

+0

Pouvez-vous fournir une vue aussi? –

+0

Bien sûr, la vue des termes: http://pastebin.com/et1mrbLK – mathieug

+0

Je viens d'ajouter la vue de la maison – mathieug

Répondre

2

Lorsque vous démarrez l'historique, assurez-vous d'indiquer {silent: true} comme option pour signaler à Backbone que vous avez déjà chargé une page complète. Cela empêchera le routeur de remplacer le DOM lorsque la vue est déjà préchargée (la première fois).

De l'Backbone.js docs:

Si le serveur a déjà rendu la page entière, et vous ne voulez pas l'itinéraire initial pour déclencher lors du démarrage de l'histoire, passer silent: true.

Alors, votre code devrait ressembler à:

Backbone.history.start({pushState: true, silent:true});

+0

Nice, exactement ce que je cherchais. Mais juste une question, comment puis-je commencer les événements? Par exemple sur ma page d'accueil, j'ai un curseur et la méthode init est dans le HomeView. Avec RequireJS, je n'accède à aucune vue. – mathieug

+1

Je ne suis pas sûr de comprendre vraiment cette question. Quand vous faites 'this.homeView = new homeView();', où 'homeView' est votre HomeView chargé par RequireJS, la fonction' initialize' sur 'HomeView' sera appelée. –

+0

Ok, j'ai un curseur dans HomeView qui est initialisé par une méthode runSlider(). Quand le HomeView est chargé, j'ai besoin de cette méthode runSlider() pour être appelée.Je l'appelle en rendu mais le rendu n'est pas appelé au premier chargement (silencieux: vrai). Mais si je l'appelle aussi en initialize, il sera appelé sur toutes les vues (mon routeur charge toutes les vues dans son initialize). – mathieug

Questions connexes