Я совершенно новичок в RequireJS, поэтому я все еще пытаюсь найти способ обойти это. У меня был проект, который отлично работал, затем я решил использовать RequireJS, поэтому я все испортил :)
В связи с этим у меня есть несколько вопросов о RequireJS и о том, как он все определяет. У меня есть файловая иерархия внутри папки скриптов:
У меня есть следующая строка в моем файле _Layout.cshtml
:
<script data-main="@Url.Content("~/Scripts/bootstrap.js")" src="@Url.Content("~/Scripts/require-2.0.6.js")" type="text/javascript"></script>
А вот мой файл bootstrap.js:
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();
});
Затем я реализовал свои модули с помощью функции define
. Примером является модуль pubsub:
define(['jQuery'], function ($) {
var
publish = function(eventName) {
//implementation
},
subscribe = function(eventName, fn) {
//implementation
}
return {
publish: publish,
subscribe: subscribe
}
});
Я в основном сделал то же самое для всех своих файлов javascript. Обратите внимание, что фактический файл, содержащий модуль pubsub, находится jquery.pubsub.js
в папке /Scripts/utils
. Так же и с другими модулями.
ОБНОВЛЕНИЕ:
Хорошо, я обновил свой загрузочный файл, теперь, когда думаю, я понимаю, что такое прокладка и почему я должен ее использовать. Но это все еще не работает для меня, хотя я также объявил все пути, которые, как я думаю, вызвали бы у меня проблемы с их правильным определением. Дело в том, что он даже не входит в мой обратный вызов require
внутри файла начальной загрузки, поэтому я предполагаю, что у меня все еще есть проблема в том, как я настраиваю или определяю свои модули?