1

我注意到 RequireJS 尝试将简单的模块值直接分配给变量的奇怪行为,如下所示:

App.tables = require(['appTables']);

这个调用的结果是 App.tables 包含这个函数:

localRequire(deps, callback, errback)

而我的 appTables.js 看起来像这样:

define({
  users: {
    name: 'tables.users',
    data: {
      name: {
        visible: true,
        hide: false,
        display: 'Name'
      },
      surname: {
        visible: true,
        hide: false,
        display: 'Surname'
      }
    }
  }
});

确实尝试以经典方式分配它是有效的:

require(['appTables'], function(appTables) {
    App.tables = appTables;
});

那么我的第一种方法有什么问题?为什么它返回一个函数而不是对象?谢谢!

4

1 回答 1

3

您正在使用的简化 CommonJS 格式 ( App.tables = require('appTables')) 旨在在模块中使用,作为 amd 格式的替代方案,您将一组模块依赖项分配给函数参数。它并不打算在您的main.js模块中使用(只需使用标准require('appTables', function(appTables) { ... });格式)。

在模块中,您可以将require调用包装在一个define块中,并传递模块名称 ( 'appTables'):

define(function(require) {
  appTables = require('appTables');
  ... do something with appTables ...
});

有关详细信息,请参阅Simplified CommonJS Wrapper的文档。

另请参阅:为什么使用备用 requirejs 定义:define(function(require) { ... }

于 2013-01-05T01:25:01.790 回答