Mój cel Potrzebuję utworzyć niestandardowy układ (układ przepływu), który może otrzymać zmienną liczbę widoków i na ich podstawie tworzy regiony w miarę potrzeby iw obrębie tych regionów pokazuje widoki, które są przekazywane. Widoki mogą być ustawione pionowo lub poziomo.Tworzenie układu, który akceptuje zmienną liczbę widoków (a więc regionów)
Wymaganie Układ ma szablon, w którym początkowo nie zdefiniowano regionów. Zawiera tylko opakowanie (data-role="region-wrapper"
), w którym dodane zostaną regiony dodane.
Moje podejście.
1 - Rozszerzanie Marionette.Layout
(oczywiście)
2 - Ovveride w konstruktor jak następującym
constructor: function(options) {
// call super here...
this.viewList= options.viewList || [];
this._defineRegions(); // see 3
}
3 - określają regiony dynamicznie
_defineRegions: function() {
_.each(this.viewList, function(view, index) {
var name = 'flowRegion_' + index;
var definition = { selector: "[data-region='flow-region-" + index + "']" };
this.addRegion(name, definition);
}, this);
},
4 - renderowania regiony i widok w trybie onRender w tym samym układzie:
onRender: function() {
_.each(this.viewList, function(view, index) {
// if the view has not been instantiated, instantiate it
// a region is a simple div element
var $regionEl = // creating a region element here based on the index
// append the region here
this.$el.find("[data-role='flow-wrapper']").append($regionEl);
var region = this.getRegion(index); // grab the correct region from this.regionManager
region.show(view);
}, this);
}
To rozwiązanie wydaje się działać, ale chciałbym wiedzieć, czy podążam za poprawnym, czy nie. Jakieś inne podejście do naśladowania?
Dzięki za odpowiedź. Muszę przekazać widoki, które nie są sobie równe. Stąd niestandardowy układ. Ponadto chciałbym skorzystać z funkcji "pokaż/zamknij". –
Nadal nie jestem sprzedawany. Lista widżetów może być podobna do przypadku. Każdy widget różni się od siebie, ale nadal są lepsze od kolekcji. Pokaż/zamknij pod-widok można również zrobić w CollectionView, usuwając model. Zapomnij o tym komentarzu, jeśli nadal tak nie jest. –
Podtrzymałem poparcie. Dzięki. W każdym razie, jeśli istnieje możliwość dodania regionów podczas wykonywania, istnieje powód. Może się mylę, ale lubię odkrywać nowe rozwiązania. Dlaczego usunięcie modelu spowoduje usunięcie pojedynczego widoku? –