Ich habe ein Nested-View-Setup, das in meiner Anwendung etwas tiefer gehen kann. Es gibt eine Reihe von Möglichkeiten, die Unteransichten zu initialisieren, zu rendern und anzuhängen, aber ich frage mich, was gängige Praxis ist.
Hier sind ein paar, an die ich gedacht habe:
initialize : function () {
this.subView1 = new Subview({options});
this.subView2 = new Subview({options});
},
render : function () {
this.$el.html(this.template());
this.subView1.setElement('.some-el').render();
this.subView2.setElement('.some-el').render();
}
Vorteile: Sie müssen sich beim Anhängen nicht um die Einhaltung der richtigen DOM-Reihenfolge kümmern. Die Ansichten werden frühzeitig initialisiert, sodass in der Renderfunktion nicht so viel auf einmal zu tun ist.
Nachteile: Sie sind gezwungen, Events () neu zu delegieren, was kostspielig sein kann? Die Renderfunktion der übergeordneten Ansicht ist mit dem gesamten Rendering der Unteransicht überfüllt, das ausgeführt werden muss. Sie können tagName
die Elemente nicht festlegen , daher muss die Vorlage die richtigen TagNames beibehalten.
Ein anderer Weg:
initialize : function () {
},
render : function () {
this.$el.empty();
this.subView1 = new Subview({options});
this.subView2 = new Subview({options});
this.$el.append(this.subView1.render().el, this.subView2.render().el);
}
Vorteile: Sie müssen Ereignisse nicht erneut delegieren. Sie benötigen keine Vorlage, die nur leere Platzhalter enthält, und Ihre Tag-Namen werden wieder von der Ansicht definiert.
Nachteile: Sie müssen jetzt sicherstellen, dass die Dinge in der richtigen Reihenfolge angehängt werden. Das Rendern der übergeordneten Ansicht wird weiterhin durch das Rendern der Unteransicht überladen.
Mit einer onRender
Veranstaltung:
initialize : function () {
this.on('render', this.onRender);
this.subView1 = new Subview({options});
this.subView2 = new Subview({options});
},
render : function () {
this.$el.html(this.template);
//other stuff
return this.trigger('render');
},
onRender : function () {
this.subView1.setElement('.some-el').render();
this.subView2.setElement('.some-el').render();
}
Vorteile : Die Subview-Logik ist jetzt von der View- render()
Methode getrennt.
Mit einer onRender
Veranstaltung:
initialize : function () {
this.on('render', this.onRender);
},
render : function () {
this.$el.html(this.template);
//other stuff
return this.trigger('render');
},
onRender : function () {
this.subView1 = new Subview();
this.subView2 = new Subview();
this.subView1.setElement('.some-el').render();
this.subView2.setElement('.some-el').render();
}
Ich habe in all diesen Beispielen eine Reihe verschiedener Praktiken gemischt und aufeinander abgestimmt (tut mir leid), aber welche würden Sie behalten oder hinzufügen? und was würdest du nicht tun
Zusammenfassung der Praktiken:
- Unteransichten in
initialize
oder in instanziierenrender
? - Führen Sie die gesamte Renderlogik für Unteransichten in
render
oder inonRender
? - Verwenden Sie
setElement
oderappend/appendTo
?
close
Methode und eine onClose
, die Kinder aufräumt, aber ich bin nur neugierig, wie ich sie überhaupt instanziieren und rendern kann.
delete
in JS ist nicht dasselbe wie in delete
C ++. Es ist ein sehr schlecht benanntes Schlüsselwort, wenn Sie mich fragen.