Wir bauen gerade eine Marionetten-basierte Anwendung. Grundsätzlich haben wir eine Marionette-Anwendung, die mehrere Regionen definiert hat. Jede Region dient als Container für verschiedene Module, um ihre Ansichten anzuzeigen. Ich möchte, dass jedes Modul die volle Kontrolle darüber hat, was in seinem Container angezeigt wird, aber ich möchte, dass die Anwendung diese Regionen zuweist. Zur Einfachheit sagen wir, dass jedes Modul nur eine einfache ItemView hat.Marionette - Beziehungen zwischen Anwendung und Modul
Ich betrachte 2 Ansätze zum Auffüllen dieser Regionen mit den Modulansichten.
Der erste Ansatz sagt, dass, wenn jedes Modul initialisiert wird, wird es seine Ansicht erstellen und es wird die Anwendung aufrufen, ihre Ansicht im angegebenen Bereich angezeigt werden, zum Beispiel:
var app = new Marionette.Application();
app.addRegions({
regionA: "#regionA",
regionB: "#regionB"
});
app.module("moduleA", function(moduleA, app, ...){
moduleA.on("start", function(){
var viewA = new MyViewA();
app.regionA.show(viewA);
}
});
app.module("moduleB", function(moduleB, app, ...){
moduleB.on("start", function(){
var viewB = new MyViewB();
app.regionB.show(viewB);
}
});
Die zweite Ansatz besagt, dass jedes Modul eine Funktion verfügbar machen sollte, die seine Ansicht zurückgibt. Die Anwendung wird diese Funktion aufrufen, wenn sie bereit ist, und sie wird die Ansicht in der angegebenen Region festhalten.
Ich bin mir nicht sicher, welcher Ansatz besser ist und wäre glücklich, Meinungen zu hören.
Sehr wahr. Das Modul sollte eine "Container" -Ansicht zum Rendern des Moduls bereitstellen. Es sollte sich nicht darum kümmern müssen, wie dies im DOM angezeigt wird: das ist die Aufgabe der Anwendung. Sorgen Sie für eine Trennung von Bedenken. – tonyhb