我在foo/bar.js
中有一个自定义小部件,声明如下:
define([
...
], function(
...
) {
return {
...
}
);
我正试图在其他类似的小部件中使用它:
require([
"foo/bar"
...
], function(bar, ..
..
但它不会加载。有人有什么建议吗?
当我在控制台中键入foo/bar
时,它会返回空对象Object {}
。当我使用旧格式和dojo.provide()
时,一切都很好。但一旦它掉下来,假发就看不见了。
重要信息:只有当我尝试使用Google托管的Dojo:时,才会出现问题
<!--
<script src="{{ STATIC_URL }}js/dojo/dojo.js" type="text/javascript"></script>
!-->
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.8.6/dojo/dojo.js"></script>
我必须使用Google托管的Dojo进行调试,因为STATIC_URL需要30-40秒才能加载(因为它是未编译的)。
首先在dojo现在使用的AMD模块的负载上阅读以下内容:http://requirejs.org/docs/whyamd.html#definition
AMD的工作方式是,它将返回所需的模块作为函数参数。您可以在require调用的函数中使用该模块。
假设您已经定义了foo/bar模块。你可以在这样的需求中使用它:
require(["foo/bar"], function (anyVarName) { // <- anyVarName will be your foo/bar return value
console.dir(anyVarName);
}
anyVarName将只存在于函数内部。使用它的代码应该在里面。
你可以需要多个模块,它们将以与你需要它们相同的顺序作为参数传递
require(["foo/bar1","foo/bar2","foo/bar3"], function (bar1, bar2, bar3) {});
这样更好吗?