【问题标题】:Why does RequireJS not load this dependency?为什么 RequireJS 不加载这个依赖?
【发布时间】:2012-12-30 15:38:38
【问题描述】:

执行以下“主”模块时,我收到“TypeError:OrdersPage 不是构造函数”

require(
    [
        'app/pages/orders/OrdersPage'
    ],
    function(OrdersPage) {
        'use strict';

        new OrdersPage();
    }
);

事实证明,当我在函数(OrdersPage)中时,“OrdersPage”是未定义的。所以问题是为什么它是未定义的——尽管将 OrdersPage 定义为依赖项?

这里是 OrdersPage 的代码,它实际上是被命中的,但是在上面的错误被打印出来之后:

require(
    [
        'backbone'
    ],
    function() {
        'use strict';

        console.log('In OrdersPage');

        return Backbone.View.extend({

        });
    }
);

综上,控制台输出如下:

TypeError: OrdersPage is not a constructor
In OrdersPage

这告诉我 OrdersPage 模块是在“主”模块加载并执行之后加载的,这已经太晚了!

编辑 1 here 提供了一个非常简单的项目来演示此问题。

编辑 2 我已经在我的 RequireJS 配置中声明了 Backbone:

require.config({
    // Initialize the application with the main application file
    deps: ['main'],

    paths: {
        // jQuery
        jquery:                      'vendor/jquery-1.8.3',

        // Underscore
        underscore:                  'vendor/underscore-1.4.3',

        // Backbone
        backbone:                    'vendor/backbone-0.9.9',

        // Templating
        handlebars:                  'vendor/handlebars-1.0.rc.1'
    },

    shim: {
        backbone: {
            deps: ['underscore', 'jquery'],
            exports: 'Backbone'
        },

        handlebars: {
            exports: 'Handlebars'
        },

        underscore: {
            exports: '_'
        }
    }
});

require(
    [
        'app/pages/orders/main'
    ],
    function() {
        'use strict';
    }
);

【问题讨论】:

    标签: backbone.js requirejs amd


    【解决方案1】:

    您应该使用define(),而不是require()。它们非常相似,但require() 不会对返回值做任何事情,也不会设置模块。

    define(['backbone'], function() {
        'use strict';
    
        console.log('In OrdersPage');
    
        return Backbone.View.extend({
    
        });
    });
    

    【讨论】:

    • 没有问题 :) 发生在我们最好的人身上。
    • 实际上查看 RequireJS 文档,我没有看到何时使用 require() 的清晰定义。我还看到很多地方在我以前使用“require”的地方使用“requirejs”,例如需要js.config。在此过程中是否发生了名称更改?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多