骨干AMD与requireJs

从日志中,骨干现在注册自AMD(Require.js)自v1.1.1以来。

太棒了,所以我试着对模块做同样的事情,但有些东西我不明白。

如果我们看注释源的第4部分来源,模块不会返回全局骨干。

不需要垫片和窗口。可以使用骨架。 但是骨干怎么不能被定义?

//定义骨干模块

define(['underscore', 'jquery', 'exports'], function(_, $, exports) {
   root.Backbone = factory(root, exports, _, $);
});

//需要Backbone模块

require(['backbone'], function (Backbone) {
  Backbone // is not undefined ?
});

//模态模块定义

define(['jquery'], function ($) {
   root.Modal = factory(root, {}, $);
});

//需要Modal模块

require(['modal'], function (Modal) {
   Modal // undefined
});

进入我的模块(使用相同的结构),当我需要我的模块时,如果我不返回任何东西,我得到了undefined

我必须返回root.Modal才能使其工作。 return root.Modal = factory(root, {}, $);

主要问题是“ 在模块不返回任何东西时如何需要模块?

我在requireJS上错过了一些东西,但是我没有找到它。

http://backbonejs.org/docs/backbone.html#section-4


有问题的代码是这样的:

define(['underscore', 'jquery', 'exports'], function(_, $, exports) {
    root.Backbone = factory(root, exports, _, $);
});

注意现在factory被称为exports作为第二个参数。 工厂函数将通过设置此对象上的字段来导出Backbone的方法。 这就是为什么当你需要Backbone时,你会得到一个有用的值,而不是undefined或垃圾。

这个原理的工作原理是RequireJS支持定义一个模块,通过返回一个来自你define的工厂函数的值,所以你可以这样做:

define(function () {
    return {
        foo: function () { ... }
    };
});

但它也支持其他手段来做到这一点,例如:

define(['exports'], function (exports) {
    exports.foo = function () { ... };
});

在上面的代码中,依赖关系列表中名为exports的模块是一个特殊的(和保留的)模块名称,意思是“给我一个对象,我可以在其上设置字段以导出值”。 骨干使用第二种方式导出值。

链接地址: http://www.djcxy.com/p/70419.html

上一篇: Backbone AMD with requireJs

下一篇: Documenting a Marionette Module with RequireJS and JSDoc3