我有一个位于foo/bar.js
的自定义窗口小部件,声明如下:
define([
...
], function(
...
) {
return {
...
}
);
我正在尝试在其他小部件中使用它:
require([
"foo/bar"
...
], function(bar, ..
..
但它不会被加载。有没有人有任何建议?
当我在控制台中键入foo/bar
时,它返回空对象Object {}
。当我使用旧格式和dojo.provide()
时,一切正常。但是一旦被删除,wiget变得不可见。
重要提示:问题只发生在我尝试使用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秒才能加载(因为它是未编译的)。
答案 0 :(得分:1)
首先阅读dojo现在使用的AMD模块的负载: http://requirejs.org/docs/whyamd.html#definition
AMD的工作方式是它将所需的模块作为函数参数返回。您可以在需求调用函数中使用该模块。假设您已经定义了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) {});
那更好吗?