RequireJS nie uruchamia skryptu data-main przed załadowaniem wymaganych modułów
Mój projekt zawiera następujące pliki:
./index.html
./js/main.js
./js/vendor/require.js
./js/viewmodel/vm.js
Theindex.html
ma następujący odpowiedni fragment:
<script data-main="js/main.js" src="js/vendor/require.js"></script>
<script type="text/javascript">
require(['viewmodel/vm', 'ko'],
function(viewmodel, ko) {
ko.applyBindings(viewmodel);
}
);
</script>
Thejs/main.js
plik jest następujący:
var root = this;
define('jquery', ['http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.js'], function () { return root.$; });
define('ko', ['http://ajax.aspnetcdn.com/ajax/knockout/knockout-2.1.0.js'], function (ko) { return ko; });
Thejs/viewmodel/vm.js
plik...
define(['jquery', 'ko'],
function($, ko) {
return {
subject: 'world',
greeting: 'hello'
}
}
);
Po otwarciu przeglądarki na index.html przeglądarka próbuje załadować plik o nazwiejs/ko.js
zamiast używać modułu zdefiniowanego wmain.js
. Wygląda na to, że plik js wskazywany przez atrybut data-main nie jest gwarantowany do uruchomienia przed rozwiązaniem zależności. Nie wydaje mi się to poprawne, ponieważ jednym z celów głównego pliku js jest zdefiniowanie wymaganej konfiguracji (tj. Ścieżki, podkładki itp.). Używam require v2.1.2.
Działa to doskonale, jeśli skopiuję zawartość mojegomain.js
plik do bloku skryptu windex.html
. Przez „doskonale w porządku” mam na myśli to, że uznał, że ko jest modułem i znajduje odpowiednie łącze CDN, aby rozwiązać ko, zamiast próbować pobrać./js/ko.js
.