require.js + backbone.js: Jak ustrukturyzować moduły, które mają funkcję inicjalizacji?
Mam aplikację z trzema stronami (które są interfejsami jednostronicowymi). Strony mają podobną, ale nie identyczną funkcjonalność.
Chcę więc mieć moduły javascript, które zapewniają wspólną funkcjonalność. Następnie każda strona może dostosować / nadpisać części wspólnej funkcjonalności.
Używam backbone.js, więc to co robię to:
załaduj pliki zawierające wspólne Modele, Widoki, Kolekcje itp.załaduj pliki specyficzne dla aplikacji, które dostosowują / zastępują części kroku 1wywołanie funkcji init (), która uruchamia wszystkie niezbędne modele / widoki / kolekcjeW tej chwili przechowuję moje moduły w kontenerze modułowym podobnym do tego:https://stackoverflow.com/a/9426071 Każdy moduł ma opcjonalną funkcję init (), która jest wykonywana przez moją główną funkcję init ().
Przykład:
Mam plik o nazwie results.js. Definiuje wspólny model / kolekcję / widok wyników wyszukiwania. W swojej funkcji init () wszystko jest instancjonowane, ale ta funkcja nie jest jeszcze wywoływana:
var resultView = new ResultView()
Następnie dołączam myApp.js, a części widoku są zastępowane.
Główna funkcja init () wywołuje init.js results.js, który uruchamia nowy widok. Wszystko działa dobrze, gładko i DRY.Teraz chcę przełączyć się na require.js zamiast na mój własny moduł-kontener i zastanawiać się, jak zorganizować mój kod.
Mogłem albo zainicjować wszystkie modele / widoki itp. W myApp.js zamiast funkcji init () każdego modułu. Oznaczałoby to posiadanie wielu powtarzalnych kodów.
Albo mogę trzymać się każdego modułu mającego funkcję init () i wywoływać te funkcje init () w myApp.js. Nie podoba mi się to, ponieważ musiałbym wyraźnie zapisać moje moduły trzy razy dla każdej z moich trzech stron:
require(['module1', 'module2', 'module3', ...],
function(module1, module2, module3, ...) {
var init = function() {
module1.init();
module2.init();
module3.init();
...
}
return {init: init};
}
);
Dla 10 modułów i pewnej liczby bibliotek nie jest to przyjemne i DRY. Czy istnieje jakikolwiek sposób na uzyskanie dostępu do wszystkich modułów, które przechowuje require.js?
Czy czegoś mi brakuje, czy powinienem ustrukturyzować mój kod w inny sposób?
Wszelkie wskazówki / myśli są mile widziane,
Michael