Dojo没有看到自定义小部件

时间:2014-09-09 15:16:00

标签: javascript django dojo

我有一个位于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秒才能加载(因为它是未编译的)。

1 个答案:

答案 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) {});

那更好吗?