如何在Require.js中引用捆绑的js文件(asp.net mvc4)?

时间:2012-09-13 20:55:04

标签: asp.net-mvc requirejs durandal bundling-and-minification toastr

我一直在研究John Papa关于SPA的复数课程。

在他的main.js中,他给每个js库命名了一个名字。

(function () {
var root = this;

define3rdPartyModules();


function define3rdPartyModules() {
    // These are already loaded via bundles. 
    // We define them and put them in the root object.
    define('jquery', [], function () { return root.jQuery; });
    define('ko', [], function () { return root.ko; });
    define('amplify', [], function () { return root.amplify; });
    define('infuser', [], function () { return root.infuser; });
    define('moment', [], function () { return root.moment; });
    define('sammy', [], function () { return root.Sammy; });
    define('toastr', [], function () { return root.toastr; });
    define('underscore', [], function () { return root._; });
}

})();

但这里的root是什么?


通过这样做,我们可以在define语句中调用这些短名称:

define('vm.session',
['ko', 'datacontext', 'config', 'router', 'messenger', 'sort'],
function (ko, datacontext, config, router, messenger, sort) {

目前,我不知道该怎么做。所以我的工作define陈述很难看:

define('vm.admin.outfitters',
['/Scripts/lib/jquery-1.8.1.js', '/Scripts/lib/jsrender.js', ...], function(){...

我知道必须有更好的方法。所有这些js文件已经包含在脚本包中。我该如何引用这些脚本?

1 个答案:

答案 0 :(得分:4)

RE:root

RequireJS和AMD ready库从全局范围中移除对象(如ko)。有些插件希望它们在全局范围内,因此我们可以在全局范围内对这些插件进行填充或弹回对象。后者是此代码中发生的事情。它主要用于Knockout的插件。

RE:您的定义语句

第一个参数是模块的名称,所以你在那里很好。第二个参数是RequireJS知道的模块列表。第3个参数是表示它的匹配变量。所以在你的代码中你可能会有这样的东西......

define('vm.admin.outfitters',
['jquery', 'jsrender'], function($, jsrender) {