2013-08-29 4 views
14

Mam nadzieję, że to pytanie nie jest zbyt obszerne, ale w tym konkretnym przykładzie require.js/ESRI jest dużo nieznanej składni i mam nadzieję, że ktoś może mi to wyjaśnić.Czy ktoś może wyjaśnić składnię związaną z tym przykładem require.js?

Po pierwsze, ten kod działa (tzn. Robi to, czego oczekuję): tworzy mapę podstawową i dodaje FeatureLayer wyciągniętą z usługi mapowej. Jest to uproszczona wersja przykładu ze strony API JavaScript ESRI. Oto kod:

var map; 
    var featureLayer; 

    require(["esri/map", "dojo/domReady!", "esri/layers/FeatureLayer"], function (Map) { 
     map = new Map("map", { 
      basemap: "topo", 
      center: [-100.195, 39.567], // long, lat 
      zoom: 4 
     }); 

     featureLayer = new esri.layers.FeatureLayer(
      "http://my-server-url.com/arcgis/rest/services/Projects/MapServer/0", 
      { 
       mode: esri.layers.FeatureLayer.MODE_ONDEMAND 
      } 
     ); 

     map.addLayer(featureLayer); 

    }); 

Teraz na poszczególne pytania:

  1. Co to wymagać ([...], funkcja (args) {} składnia robi nie wiem nawet wiedzieć, jak to przeczytać.Jest to wywołanie funkcji require.js? Co znajduje się w nawiasach kwadratowych? Jakie są argumenty funkcji?

  2. Z innych przykładów, wygląda na to, że zwykle powinien być jeden argument funkcji na dołącz do wywołania require.js tutaj, jeśli dodaję argument dla FeatureLayer, to nie działa.

  3. "Dojo/domReady!" include nigdy nie ma odpowiedniego argumentu w żadnym przykładzie. Czy jest to związane z wykrzyknikiem? Co oznacza wykrzyknik?

  4. Czy ktoś może wskazać mi USEFUL require.js odniesienia? Strona requirejs.org przypomina raczej specyfikację techniczną niż podręcznik użytkownika. A strona ESRI wydaje się zakładać, że wiesz, jak używać wymagać.

I tak, I zostały Googling - problemem jest to, że Google nie jest wielki w poszukiwaniu pytania składni komputer ponieważ paski znaków interpunkcyjnych, a ponieważ „wymaga javascript składni” i tym podobne powodują brzydko (zbyt szerokie) wyszukiwane hasła.

+0

@Słak: Co odnosi się do "tego" w komentarzu? – Klay

+0

@Ricardo: Może przegapiłeś pytanie numer 4, w którym zaznaczam, że próbowałem czytać przez dokumenty i uznałem je za nieprzydatne, dlatego proszę o inne referencje. – Klay

+0

@Klay: '[...]'. – SLaks

Odpowiedz

25
  1. Składnia require([...], function(args) { } mówi „załadować listę modułów, a raz oni wszyscy załadowaniu wywołać tę funkcję z wartościami zwrotu tych modułów jako argumenty”. W nawiasach kwadratowych znajduje się tablica dowolnych ścieżek do pliku skryptu (minus .js) lub identyfikatorów modułów odwzorowanych za pomocą require.config paths section. Argumenty funkcji wywołania zwrotnego odpowiadają ścieżkom/modułom w tablicy, ale nie wszystkie moduły zwracają użyteczne wartości, jak zauważyłeś w następnym pytaniu ...

  2. Dodanie argumentu dla FeatureLayer nie działa, ponieważ nie można pominąć argumentów. Należy jednak pamiętać, że wiele modułów nie zwraca wartości, która ma być użyta. Zobaczysz to bardzo z wtyczkami jQuery, gdzie ładowanie modułu po prostu rejestruje wtyczkę za pomocą jQuery, ale nie zwraca wartości do osoby dzwoniącej. Nie znam ESRI, ale z fragmentu kodu wygląda na to, że ładowanie FeatureLayer po prostu dodaje FeatureLayer do globalnego obiektu esri.layers.

  3. Składnia wykrzyknika jest zarezerwowana dla plugins. Zwykle po wykrzykniku pojawia się coś innego, co wskazuje na zasoby, które wtyczka mogłaby załadować, np. text!myTemplate.html, ale w przypadku domReady! wtyczka istnieje tylko jako sposób oczekiwania na załadowanie DOM przed wywołaniem funkcji zwrotnej, więc nic nie musi podążać za wykrzyknikiem.

  4. Zalecenie listy zasobów zewnętrznych jest nie na temat na StackOverflow, ale tutaj jest jeden, że znalazłem pomocne w uzyskaniu podstawowych pojęć: http://aaronhardy.com/javascript/javascript-architecture-requirejs-dependency-management/

+2

Idealny! Dziękuję Ci. Doceniam, że poświęciłeś czas na odpowiedź tak dokładnie. – Klay

0

Ten odcinek requirejs docs opisuje wykrzyknik oznacza temperaturę w kontekście domReady: http://requirejs.org/docs/api.html#pageload

od DOM gotowy jest częstą konieczność stosowania, idealnie zagnieżdżone funkcje API powyżej można by uniknąć. Moduł domReady implementuje także API wtyczki Loader, więc możesz użyć składni wtyczki ładowania (zauważ zależność! W zależności od domReady), aby wymusić funkcję wywołania require(), aby oczekiwała na gotowość DOM przed wykonaniem.