使用google apis从源迁移到dojo 1.5时,Dojo.dnd.source停止工作

时间:2010-12-11 00:21:31

标签: drag-and-drop dojo

我成功地使用dojo.dnd.Source和从我的网络服务器加载的Dojo 1.4.3。但是,由于它是共享主机或由于某些其他原因,加载速度非常慢。 (偶尔也会持续1分30秒)

所以我现在尝试切换到DOJO 1.5和googleapis作为来源。结果加载时间要好得多,但我现在的问题是dojo.dnd无法识别。这是我用来加载dojo.dnd.Source

的代码

         dojo.addOnLoad(function() {                
            dojo.require("dijit.Dialog");
            dojo.require("dojo.parser");
            dojo.require("dijit.Editor");
            dojo.require("dojo.dnd.Source");

            widgetSrcNode = new dojo.dnd.Source("admin_widgetSrcNode", {accept:["unknown"]});

我收到的错误消息如下: dojo.dnd未定义 http://mydomain.com/admin/somepage.php?wp=17 第171行

- 消息结束

第171行:widgetSrcNode = new dojo.dnd.Source(“admin_widgetSrcNode”,{accept:[“unknown”]});

我在1.5 vs 1.4中看不到dojo.dnd文档的任何变化,我尝试了几个djconfig选项,但没有运气。我还能尝试什么?

1 个答案:

答案 0 :(得分:0)

只要您在页面中包含dojo.js,您就可以立即获得所有Dojo Base。它适用于Dojo的任何版本。

但是当您使用Dojo的CDN版本(在您的情况下为Google CDN)时,所有dojo.require()调用都将变为异步。发布dojo.require()并不意味着下一行将提供所需的内容。你应该等待它。

幸运的是,这部分很容易。尝试修改你的代码:

// require our stuff outside of dojo.ready()
dojo.require("dijit.Dialog");
dojo.require("dojo.parser");
dojo.require("dijit.Editor");
dojo.require("dojo.dnd.Source");

dojo.ready(function() {
  // DOM is loaded and required files are downloaded
  // let's create what we want
  widgetSrcNode = new dojo.dnd.Source(...);
});

或者您可以随时进行嵌入式等待:

dojo.ready(function(){
  // DOM is ready
  // require more stuff
  dojo.require("dijit.Dialog");
  dojo.require("dojo.parser");
  dojo.require("dijit.Editor");
  dojo.require("dojo.dnd.Source");

  // now wait for it
  dojo.ready(function() {                
    // let's create what we want
    widgetSrcNode = new dojo.dnd.Source(...);
  });
});

我个人更喜欢前者 - 只是更简单。

顺便说一下,我使用dojo.ready()代替dojo.addOnLoad()纯粹是出于个人喜好。它们是同义词,可以互换使用。