【发布时间】:2012-02-09 08:58:51
【问题描述】:
我开始考虑 requirejs 和新的 Dojo AMD 结构,但我在一些早期测试中遇到了问题:
cg/signup.js:
define(['dojo/_base/fx', 'dojo/dom'], function(fx, dom){
return function(){
this.hidePreloader = function(id){
var preloader = dom.byId(id);
fx.fadeOut({node : preloader}).play()
}
}
})
这很好用。在主 cg.js 文件中:
require(['dojo/_base/kernel', 'dojo/_base/loader'])
dojo.registerModulePath('cg', '../cg')
require(['cg/signup', 'dojo/domReady!'], function(Signup){
var sp = new Signup();
sp.hidePreloader('preloader')
})
巴姆。完毕。但是,在使用 Simplified CommonJS Wrapper 结构时:
define(function(require){
var fx = require('dojo/_base/fx'),
dom = require('dojo/dom');
return function(){
this.hidePreloader = function(id){
var preloader = dom.byId(id);
fx.fadeOut({node : preloader}).play()
}
}
})
我收到一个 undefinedModule 错误。它似乎来自dojo/_base/fx 行,但我不知道为什么。
更新
为了澄清。
index.html 脚本
<script type="text/javascript" src="js/dojo/dojo.js.uncompressed.js" data-dojo-config="isDebug:true,async:true"></script>
<script type="text/javascript" src="js/cg.js"></script>
cg.js
require(['dojo/_base/kernel', 'dojo/_base/loader'])
dojo.registerModulePath('cg', '../cg')
require(['cg/signup', 'dojo/domReady!'], function(signup){
signup.testFunc()
})
js/cg/signup.js
define(['require', 'exports'], function(require, exports){
var dom = require('dojo/_base/kernel');
// Any other require() declarations (with very very few exceptions like 'dojo/_base/array throw undefinedModule errors!!!
// without any error causing requires, this works fine.
exports.testFunc = function(){
alert("hello")
}
})
【问题讨论】:
-
嗯,稍微不同的变体似乎适用于 JSFiddle。 (但我现在无法链接到它,因为 JSFiddle 处于只读模式。)您能否提供有关确切错误的更多详细信息?
-
这就是确切的错误。通过使用具有相同路径和相同 require 语句的 Simplified CommonJS Wrapper 技术,控制台会打印错误
undefinedModule。我在脚本配置中有isDebug=true,debugAtAllCosts不会再抛出任何东西。适合您的变化是什么? -
我无法在 JSFiddle 上分成多个文件,所以我尝试了
define("foo", function (require) { ... }),其中...包含您的要求语句,加上console.logs 用于fx和dom对象。控制台记录了两个看起来很疯狂的对象... Dojo 1.7.1? -
嗯...除了 _base 中的几个模块之外,我似乎什么都没有加载。
dojo/_base/kernel和dojo/_base/array工作,但我尝试过许多其他的抛出undefinedModule错误。这是路径问题吗?我尽可能多地关注 T 的参考资料,但它不起作用。 -
此外,使用第一个“name”参数(在您的示例中为 foo),则结果对象为
3,因此没有属性。没有那个参数,我至少可以访问exports。
标签: javascript dojo js-amd