首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >主干网AMD需要AMD

主干网AMD需要AMD
EN

Stack Overflow用户
提问于 2014-05-06 15:50:55
回答 1查看 2.2K关注 0票数 0

从日志中,主干现在注册为AMD (Require.js),从v1.1.1开始。

很好,所以我试着对一个模块做同样的事情,但是有些事情我不明白。

如果我们查看附加说明的资料来源源,该模块不会返回全局主干。

不需要垫片和window.Backbone。但是脊梁怎么能不能不确定呢?

//定义骨干模块

代码语言:javascript
复制
define(['underscore', 'jquery', 'exports'], function(_, $, exports) {
   root.Backbone = factory(root, exports, _, $);
});

//需要主干网模块

代码语言:javascript
复制
require(['backbone'], function (Backbone) {
  Backbone // is not undefined ?
});

//模块定义

代码语言:javascript
复制
define(['jquery'], function ($) {
   root.Modal = factory(root, {}, $);
});

//需要模块

代码语言:javascript
复制
require(['modal'], function (Modal) {
   Modal // undefined
});

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

为了让它正常工作,我必须返回root.Modal。return root.Modal = factory(root, {}, $);

主要问题是“如何在模块不返回任何内容的情况下需要模块??”

我在requireJS上漏掉了一些东西,但我没有找到。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-06 16:13:13

有关守则如下:

代码语言:javascript
复制
define(['underscore', 'jquery', 'exports'], function(_, $, exports) {
    root.Backbone = factory(root, exports, _, $);
});

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

之所以这样做,是因为RequireJS支持通过从给define的工厂函数返回一个值来定义模块,所以您可以这样做:

代码语言:javascript
复制
define(function () {
    return {
        foo: function () { ... }
    };
});

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

代码语言:javascript
复制
define(['exports'], function (exports) {
    exports.foo = function () { ... };
});

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23499345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档