2013-01-05 111 views
1

我注意到一个奇怪的行为与RequireJS试图将单模值直接赋值给一个变量,像这样的: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; 
}); 

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

+0

你应该通过该模块的名称为'require',而不是一个数组。所以:'App.tables = require('appTables');'应该按预期工作。 –

+0

感谢您的回复,但它给了我以下错误:“错误:模块名称”appTables“尚未加载上下文:_。使用require([])” – Ingro

+0

您需要将'require'包装在当您使用简化的CommonJS语法时,可以使用'define'块。所以:'define(function(require){App.tables = require('appTables'); ...});'应该工作。请参阅:http://requirejs.org/docs/api.html#cjsmodule –

回答

3

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

在模块中,你会包装在definerequire通话,并通过模块名称('appTables'):

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

参见文档上Simplified CommonJS Wrapper了解详情。

参见:Why use alternate requirejs define: define(function(require) { ... }

+0

这给出错误“错误:不匹配的匿名定义()模块”。这也可能导入这个模块(或者至少查看它)每次使用这个功能是不理想的。 – Ben

相关问题