Ich bin total neu in RequireJS, also versuche ich immer noch, mich zurecht zu finden. Ich hatte ein Projekt, das vollkommen in Ordnung war, dann entschied ich, RequireJS zu verwenden, also vermasselte ich es :)Implementieren von AMD in JavaScript mit RequireJS
Mit diesem aus dem Weg, habe ich ein paar Fragen über RequireJS und wie es alles herausfindet. Ich habe die Dateihierarchie innerhalb des Scripts Ordner:
Ich habe die folgende Zeile in meinem _Layout.cshtml
Datei:
<script data-main="@Url.Content("~/Scripts/bootstrap.js")" src="@Url.Content("~/Scripts/require-2.0.6.js")" type="text/javascript"></script>
Und hier ist meine bootstrap.js Datei:
require.config({
shim: {
'jQuery': {
exports: 'jQuery'
},
'Knockout': {
exports: 'ko'
},
'Sammy': {
exports: 'Sammy'
},
'MD': {
exports: 'MD'
}
},
paths: {
'jQuery': 'jquery-1.8.1.min.js',
'Knockout': 'knockout-2.1.0.js',
'Sammy': 'sammy/sammy.js',
'MD': 'metro/md.core.js',
'pubsub': 'utils/jquery.pubsub.js',
'waitHandle': 'utils/bsynchro.jquery.utils.js',
'viewModelBase': 'app/metro.core.js',
'bindingHandlers': 'app/bindingHandlers.js',
'groupingViewModel': 'app/grouping-page.js',
'pagingViewModel': 'app/paging-page.js'
}
});
require(['viewModelBase', 'bindingHandlers', 'Knockout', 'jQuery', 'waitHandle', 'MD'], function (ViewModelBase, BindingHandlers, ko, $, waitHandle, MD) {
BindingHandlers.init();
$(window).resize(function() {
waitHandle.waitForFinalEvent(function() {
MD.UI.recalculateAll();
}, 500, "WINDOW_RESIZING");
});
var viewModelBase = Object.create(ViewModelBase);
ko.applyBindings(viewModelBase);
viewModelBase.initialize();
});
require(['viewModelBase', 'bindingHandlers', 'Knockout'], function (ViewModelBase, BindingHandlers, ko) {
BindingHandlers.init();
var viewModelBase = new ViewModelBase();
ko.applyBindings(viewModelBase);
viewModelBase.initialize();
});
Dann habe ich meine Module mit der define
Funktion implementiert. Ein Beispiel ist das Pubsub-Modul:
define(['jQuery'], function ($) {
var
publish = function(eventName) {
//implementation
},
subscribe = function(eventName, fn) {
//implementation
}
return {
publish: publish,
subscribe: subscribe
}
});
Ich habe im Grunde genommen die gleiche Sache für alle meine Javascript-Dateien. Beachten Sie, dass die eigentliche Datei mit dem Pubsub-Modul jquery.pubsub.js
im Ordner /Scripts/utils
ist. Dies ist auch bei anderen Modulen der Fall.
UPDATE:
Ok ich jetzt meine Bootstrap-Datei aktualisiert, dass ich denke, Ich verstehe, was ein Shim ist und warum sollte ich es verwenden werden. Aber es funktioniert immer noch nicht für mich, obwohl ich auch alle Wege erklärt habe, von denen ich denke, dass sie mir Schwierigkeiten bereitet hätten, sie richtig zu machen. Die Sache ist, dass es nicht in meinen require
Callback innerhalb der Bootstrap-Datei geht, also denke ich, habe ich noch ein Problem in der Art, wie ich meine Module konfiguriere oder definiere?
Ryan, danke für deine Antwort. Mein Problem ist, dass RequireJS die Abhängigkeiten nicht richtig löst. Zum Beispiel ist der erste Fehler, der in der Konsole erscheint, "jQuery ist nicht definiert" im Pubsub-Modul. – Kassem
Wo ist die '_Layout.cshtml' Datei in Ihrer Verzeichnisstruktur? –
Ok, ich habe mehr darüber gelesen, was ein Shim ist und wie man es konfiguriert und all das, aber ich konnte es immer noch nicht zum Laufen bringen. Ich habe meinen Beitrag aktualisiert. Was mache ich noch falsch? Vielen Dank. – Kassem