4

我一直在学习约翰·帕帕关于 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 文件都已包含在脚本包中。如何引用这些脚本?

4

1 回答 1

4

回复:根

RequireJS 和 AMD 就绪库从全局范围中删除对象(比如 ko)。一些插件希望它们在全局范围内,因此我们可以填充这些插件或将对象弹出回全局范围。后者是这段代码中发生的事情。主要是为 Knockout 的插件完成的。

RE:你的定义语句

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

define('vm.admin.outfitters',
['jquery', 'jsrender'], function($, jsrender) { 
于 2012-09-14T16:41:58.130 回答