是的,但是确切的语法与问题中使用的语法不同。
加载字符数据的插件是dojo/text
.
加载 JavaScript 库时不应使用扩展名,并且文件的位置是通过 dojotoolkit 库的相对位置或 dojoConfig 中的包 位置声明设置的:
require(['underscore'], function( _ ){
_.reduce ...
});
在 Dojo 配置中配置命名空间以避免混乱的导入路径 - 请参阅dojoConfig
加载程序文档。
此外,考虑使用dojo/global模块和/或将 Dojo 模块定义为 Underscore.js 的包装器:
//_.js
define(['dojo/global', 'underscore'], function(global){
return global._
});
考虑到上述考虑,您必须手动加载实际的 .js 文件。如果与 dojo/text 插件结合使用,可以创建一个包装器,该包装器还加载所需的 JS 并对其进行评估,以下可以解决问题。
/var/www/dojo-release-1.7/ext_lib/_.js - 此示例文件分层放置在库名称空间中,与 dojo、dijit、dojox 并排放置
define(['dojo/global', 'dojo/text!./Underscore.js'], function(global, scriptContents){
global.eval(scriptContents);
return global._ // '_' is the evaluated reference from window['_']
/**
* Alternatively, wrap even further to maintain a closure scope thus hiding _ from global
* - so adapt global.eval to simply eval
* - remove above return statement
* - return a dojo declared module with a getInstance simple method
*/
function get_ () { return _ };
var __Underscore = declare('ext_lib._', [/*mixins - none*/], {
getInstance: get_
});
// practical 'static' reference too, callable by 'ext_lib.getInstance' without creating a 'new ext_lib._'
__Underscore.getInstance = get_;
return __Underscore;
});
使用 declare here
定义自己的模块的示例注意:此代码未经测试;随时添加更正。