l'appel de javascript sur le rendu des vues de la colonne vertébrale js. post-rendu de rappel?
voici, une épine dorsale vue de rendre l'appel:
render: function() {
$(this.el).html(this.template({title: 'test'})); //#1
this.renderScatterChart();
return this;
},
j'appelle un standard rendre au #1. et puis, j'ai appeler une méthode de [cette fois, c'est un wrapper pour la cartographie, lib] qui ressemble un div. la div est rendu par le rendu d'appel. mais à ce stade, il n'est pas attaché à la DOM encore (à droite?). de sorte que le graphique appeler malheureusement meurt.
quel est le motif pour cela? j'aimerais entendre qu'il y a un post-rendu de rappel. j'ai essayé quelques hacks autour de cela, et parfois je reçois le graphique pour le travail, mais les événements ne se lient pas.
Vous devez vous connecter pour publier un commentaire.
Mon approche habituelle pour ce genre de chose est d'utiliser
setTimeout
avec un délai d'attente de zéro pour organiser quelque chose se passe une fois que le navigateur obtient de nouveau le contrôle. Essayez ceci:Ou, si
renderScatterChart
est déjà lié à la appropriéethis
:Vous pouvez également utiliser
_.reporter
si vous voulez être plus explicite sur ce que vous êtes jusqu'à:De sorte que vous pourriez aussi faire comme ceci:
setTimeout(..., 0)
truc juste définit une fonction à appeler lorsque votre JavaScript est fait et le contrôle retourne au navigateur. Ainsi, votre code sera mis tout en place et ajoutez le tout à la cathédrale, puis le navigateur prend le dessus et déclenche le retard de la fonction. Cette astuce est un peu un hack mais utile.Je sais que c'est une réponse, mais pensé que je voudrais partager. Trait de soulignement js a présent vous avec l' _.reporter fonction.
Selon le trait de Soulignement docs, c'est effectivement la même chose que la solution retenue.
C'est parce que vous exécutez le rendu avant .el est inséré dans les DOM. Vérifier mon auto code explicatif(exécuter dans une page vierge avec Backbone.js inclus):
Vous pourriez faire cela (si renderSactterChart fonctionne sur un 'jQuery-isée" objet):
(ce n'est pas le véritable élément du DOM...)
Eu le même problème que vous n'avez...avec highcharts. J'ai été à l'aide de la colonne vertébrale.LayoutManager, et a terminé à bidouiller le code pour ajouter un postRender de rappel. Aimerais voir cela comme une partie de Backbone.js
Si vous ne souhaitez pas utiliser le
setTimeout
de hack, je pense que de cette façon est plus "normal":Vient de passer le $el élément à la fonction qui doit manipuler des éléments ajoutés par
render()
puis de manipulation du DOM peut être fait sur $el.Eh bien cela a déjà été répondu, mais pour l'avenir de référence, j'ai eu ce problème plusieurs fois. Je l'ai résolu en ajoutant des événements personnalisés, dans ce cas, il pourrait être quelque chose comme
Et puis, quand j'ai ajouter l'élément du DOM, je déclencheur comme
Maintenant, ce n'est certainement pas une belle solution. Vous ajoutez la responsabilité du déclenchement de cet événement pour tout ce qui est en ajoutant le rendu de la vue vers les DOM. Selon la façon dont votre code est structuré, il peut être meilleur ou pour le pire. Encore une fois, je suis en train de poster cela comme une future référence et alternative.
Plus d'infos: http://backbonejs.org/#Events
Cela devrait être fait comme suit:
de l'échantillon avec de marionnettes mais l'idée fonctionne pour la colonne vertébrale d'une vue sur la