Ich habe eine Ansicht wie folgt aufgebaut Modell:Wie funktioniert Backbone View-Rendering?
var PlayerView = Backbone.View.extend({
el: "div.player",
template: _.template($("#playerTemplate").html()),
render: function() {
this.$el.append(this.template(this.model.toJSON()));
return this;
}
});
und die Hauptansicht wird wie folgt aufgebaut:
var AppView = Backbone.View.extend({
el: "#players",
render: function() {
var pView = new PlayerView({model: playerModel});
this.$el.append(pView.render().$el);
}
});
Wenn Sie die render
von AppView
bemerken, ich die PlayerView
erste bin Rendering und fügt dann $el
an AppView
's $ el an. Ich habe erwartet, hier eine Fehlersituation, da es PlayerView
2 mal zur Hauptansicht angezeigt werden würde, wie folgt:
- Zuerst wird in den
pView.render()
wo ich zufrieden stellte inpView
und - Zweitens in der gleichen Zeile, wo ich Hängen Sie pViews
$el
an die Hauptansicht an.
Aber es fügt nur die pView
nur einmal an. Wie funktioniert das?
Ich bin mir nicht sicher, dass ich meine Frage klar erklärt habe; Ich kann bei Bedarf mehr Kontext hinzufügen.
Das Anhängen des 'PlayerView' -Elements an' AppView' bewirkt nicht, dass der Inhalt sich dupliziert. Sie hängen den Inhalt an 'PlayerView' an und hängen dann das' PlayerView'-Element (welches das Containerelement + den angehängten Inhalt ist) an 'AppView' an. Auch die Backbone-Renderfunktionalität wird vollständig von Ihnen definiert, so dass sie in keiner Weise wirklich "funktioniert", sondern nur in der Weise, wie Sie sie definieren. Das 'el' Zeug ist immer noch Javascript/Jquery. –
Danke für die Erklärung. Ich bin mir nicht sicher, ob ich folgendem Beispiel folgen soll: Mein html enthält bereits 'div.player'. Wenn ich den Inhalt zum ersten Mal an' PlayerView' angehängt habe, sollte er auf dem Bildschirm erscheinen, oder? Danach, wenn ich 'PlayerView's' el' an' AppView' anschließe, sollte das ganze 'PlayerView' wieder auf dem Bildschirm gezeichnet werden. Bitte korrigieren Sie mich, wenn ich falsch liege. – akshayKhot
Ich verstehe Ihre Verwirrung. Wenn ein Element an ein anderes angehängt wird, wird es von seinem ursprünglichen Punkt entfernt. Beispiel. https://jsfiddle.net/guanzo/xtenekte/2/ –