TypeError:dojo._xdResourceLoaded(...)不是函数

时间:2013-10-16 20:25:51

标签: javascript dojo widget cross-domain

我正在开发一个项目,要求从另一台服务器加载一些自定义Dojo小部件。

我使用dojo._xdResourceLoaded(function()根据Dojo - Issue loading widget cross-domain

的建议包装所有内容

我收到此错误

TypeError:dojo._xdResourceLoaded(...)不是一个函数,但是我的widget工作。不知道为什么会抛出这个错误

我们正在使用dojo 1.6。

dojo._xdResourceLoaded(function(){
 return {
 depends: [
 ["provide", "widgets.test"],
 ["require", "dijit._Widget"],
 ["require", "dijit._Templated"]
  ],
 defineResource: function(dojo) {
 ///////////////////////////////
  /// Begin standard declaration
 dojo.provide("widgets.test");
 dojo.require("dijit._Widget");
 dojo.require("dijit._Templated");
 dojo.declare("widgets.test", [dijit._Widget, dijit._Templated], {

// Our template - important!
templateString: dojo.cache("widgets.test", "templates/Widgettest.html"),
postCreate: function(){...

1 个答案:

答案 0 :(得分:0)

链接线程中的回复并不正确。与所有用户代码一样,您的代码不应调用Dojo对象的下划线(私有)方法。这些方法仅供Dojo代码使用。

如果您正在编写使用旧版XD加载器跨域加载依赖项的模块,则需要要求所有跨域依赖项,然后在dojo.ready中包装使用这些依赖项的代码:

dojo.provide("widgets.test");
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
dojo.ready(function () {
    dojo.declare("widgets.test", [ dijit._Widget, dijit._Templated ], { /* … */ });
});

dojo.ready在加载所有异步依赖项后执行回调。

毋庸置疑,AMD比这要好得多,因此只要你有能力,升级到Dojo 1.7+并使用AMD模块将是最好的解决方案。