Używam wymagań w mojej aplikacji, ale nie dobrze rozumiem wszystkich aspektów jego pracy.

Mam plik main.js, gdzie opisane są zależności. Mam Backbone.Router komponent w górę i uruchomiony, który wyzwala różne klasy application (klasa odpowiedzialna do utworzenia głównego widoku). Niektóre kodu, które można zobaczyć Oto.

Co widzę z wymagań: Nawet jeśli jakiś widok nie był jeszcze "wymagany" (oznaczają wyraźnie wywołanie, aby wymagać (" . Jeśli dodam nową aplikację, ale są to Subviews nie są gotowe, ale nigdy nie korzystałem z aplikacji - nieistniejące subviews są nadal ładowane i otrzymuję 404 błędy.

Nie jestem pewien, że wyjaśniłem wszystko jasno, ale mam nadzieję, że masz rację.

1
Alexander Beletsky 26 sierpień 2012, 20:33

2 odpowiedzi

Najlepsza odpowiedź

Wygląda na to, że używasz Commonjs Sugested Forma define (). Należy pamiętać, że jest to tylko wygoda do owijania kodu węzła / CommanoS, ale moduły AMD nie działają jak moduły węzła.

AMD Loader będzie skanować wymagać ('') połączeń w fabrycznej funkcji modułu i upewnij się, że załadujesz wszystkie moduły. W przeciwnym razie synchroniczny dostęp do tego modułu, wykonując require('./apps/DashboardApp');, nie powiedzie się w przeglądarce, ponieważ plik IO jest domyślną siecią async IO.

Jeśli chcesz opóźnić ładowanie niektórych skryptów, musisz użyć formularza zwrotnego wymagań:

require(['./apps/DashboardApp'], function (DashboardApp) {
});

Ale ten telefon jest wezwaniem asynchronizacji, więc musiałbyś odpowiednio dostosować publiczne API swojego modułu.

Zasadniczo, jeśli chcesz załadować obciążenie zależności, potrzebna jest forma wymagania zwrotnego, biorąc pod uwagę Async charakter pliku IO w przeglądarce.

3
jrburke 26 sierpień 2012, 22:28

Ponieważ wymagania ładuje się wszystkich wymaganych zależności. Szybko spójrz na swój kod, widzę, że ładujesz moduł routingu i routing ma:

var ViewManager = require('ViewManager');

Oznacza to, że obciąży ViewManager, zależne, które są określone przez ViewManager i inne zależności, które potrzebują tych modułów. Zasadniczo, gdy zawierasz wymaganie (...), jest taka sama jak określająca zależność. Zostanie to przekształcone przez wymagania

define(['ViewManager'], ...)

1
Tomas Kirda 26 sierpień 2012, 16:59