2013-09-06 4 views
8

Jeśli mam moduł non-AMD o nazwie old.js i wewnątrz tego skryptu Mam dwie funkcje f1 i f2 zdefiniowane. Potrzebuję ich użyć, jak wyeksportować oba?Czy możemy wyeksportować wiele funkcji innych niż AMD z modułu w requirejs?

require.config({ 
    paths: { 
     "jquery": "https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min", 
    }, 
    shim: { 
     "old": { 
      deps: ["jquery"], 
      exports: ["f1", "f2"] 
     } 
    }, 
    urlArgs: "bust=" + (new Date()).getTime() 
}); 

To nie zadziała. Otrzymam błąd split. Dokument nie wspomina o wielu (http://requirejs.org/docs/api.html#config-shim) Zakładam, że to dlatego, że nawet te przykłady jquery są pojedynczymi plikami i mają "entry" funkcję/klasę.

Odpowiedz

12

Generalnie, jeśli chcesz eksportować więcej niż jeden obiekt z modułu, ty ... nadal trzeba eksportować pojedynczy obiekt. Standardowy formularz powinien dołączyć swoje funkcje do obiektu eksportu i powrócić że:

function f1() { ... } 
function f2() { ... } 

return { 
    f1: f1, 
    f2: f2 
}; 

Jeśli jest to kod non-AMD, nie może mieć oświadczenie return, ale że jeszcze trzeba dodać obiekt eksportowej .

Wygląda jak recommended option dla starego kodu jest tylko określenie f1 w nieruchomości exports, ale wtedy nie dalej munging w funkcji init. Prawdopodobnie wymagane jest użycie właściwości exports, aby sprawdzić, czy plik został załadowany, więc nie ma znaczenia, czy uwzględnisz wszystkie elementy. Zakładając f1 i f2 są zarówno globalne, prawdopodobnie można to zrobić:

shim: { 
    "old": { 
     deps: ["jquery"], 
     exports: "f1", 
     init: function() { 
      return { 
       f1: f1, 
       f2: f2 
      }; 
     } 
    } 
} 

To powinno pozwalają wymagać old i uzyskać obiektu eksportowego, zamiast f1:

require(['old'], function(old) { 
    old.f1(); 
    old.f2(); 
}); 
+0

Hmm tak oni nie są AMD, więc są zwykłymi funkcjami javascript. Mówisz, że muszę dodać dodatkowy kod do pliku old.js? – CppLearner

+0

Zobacz moje zmiany. Myślę, że jest to zalecane podejście, na dokumentach, choć nie przetestowałem go. – nrabinowitz

+0

Tak, to podejście działa. Wielkie dzięki. Czy jestem zbyt śpiący, czy też komentarz do dokumentacji pod "init" w dokumencie jest zbyt mylący? Nie widzę żadnego konkretnego odniesienia, jak sobie z tym poradzić. Przeczytaj całą część shim 3 razy. – CppLearner