La vue Backbone.JS est rendue, mais n'est pas affichée sur la page
-
10-12-2019 - |
Question
Je travaille sur la conversion d'une application d'une seule page en backbone.JS.La vue ci-dessous utilise la balise body comme tagName - c'est-à-dire que je veux que la vue occupe tout le contenu de la page.Je ne veux pas utiliser de divs de conteneurs ou d'autres hacks.
var ThingView = Backbone.View.extend({
tagName : "body",
...
// Show the HTML for the view
render : function() {
console.log('Displaying thing')
$(this.el).append('<h1>test</h1>');
console.log('finished')
console.log($(this.el))
return this; // For chaining
Lors du rendu, je vois
finished
[
<body>
<h1>test</h1>
</body>
]
Mais après avoir inspecté le DOM, le corps n'a plus le texte.
La solution
tagName
indique quelle balise Backbone doit utiliser pour créer son el si aucun el n'est fourni par le constructeur.L'élément créé n'est pas automatiquement inséré dans le DOM.
Le moyen le plus simple est probablement de créer votre vue avec son élément défini sur body
:
new ThingView({el:'body'})
Autres conseils
Qu'est-ce que Nikoshr a expliqué est correct.Ajoutez-y, l'utilisation de TAGName est correcte.Mais idéalement, vous devez utiliser El Element, qui est défini dans la bibliothèque Backbone.js en tant qu'élément de vision (EL).
ci-dessous est le code idéal que vous devriez utiliser tout en faisant cela.
<script type="text/javascript">
$(document).ready(function(){
var ThingView = Backbone.View.extend({
el:$("body"),
initialize: function(){
_.bindAll(this,"render");
this.render();
},
render:function(){
this.el.append('<h1>test</h1>');
console.log('finished');
console.log($(this.el).html());
}
});
var ThingView = new ThingView();
});
</script>