我对 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
文件夹内。其他模块也是如此。
更新:
好的,我现在更新了我的引导文件,因为我想我了解什么是 shim 以及为什么我应该使用它。但它仍然对我不起作用,尽管我还宣布了所有我认为会导致我无法正确使用它们的路径。问题是它甚至没有进入require
引导文件中的回调,所以我想我在配置或定义模块的方式上仍然存在问题?