Obecnie tworzymy aplikację opartą na marionetce. Zasadniczo mamy aplikację marionetek, która ma wiele regionów zdefiniowanych na niej. Każdy region będzie działał jako kontener dla różnych modułów, aby wyświetlać ich widoki. Chcę, aby każdy moduł miał pełną kontrolę nad tym, co jest wyświetlane w jego kontenerze, ale chcę, aby aplikacja przydzieliła te regiony. Dla uproszczenia załóżmy, że każdy moduł ma prosty ItemView.Marionetka - relacje między aplikacją a modułem
Rozważam 2 podejścia do zapełniania tych regionów widokami modułów.
Pierwsze podejście mówi, że gdy każdy moduł jest inicjowany, stworzy swój pogląd i to nazywamy aplikację, aby wyświetlić swój pogląd w określonym regionie, na przykład:
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);
}
});
drugim podejście mówi, że każdy moduł powinien ujawnić jakąś funkcję, która zwraca jego widok. Aplikacja wywoła tę funkcję, gdy będzie gotowa, i utworzy widok w wyznaczonym regionie.
Nie jestem pewien, które podejście jest lepsze i byłoby miło usłyszeć opinie.
Bardzo prawdziwe. Moduł powinien zapewnić widok "kontenera" do renderowania modułu. Nie powinien * nie * martwić się, jak wyświetlić to w DOM: jest to zadanie aplikacji. Zachowaj separację obaw. – tonyhb