下面的XHTML,对真实应用程序的大量简化,导致Firebug报告“无法加载类'my.dojo.dnd.Source”:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<style type="text/css">
@import url("http://o.aolcdn.com/dojo/1.6/dojo/resources/dojo.css");
@import url("http://o.aolcdn.com/dojo/1.6/dojo/resources/dnd.css");
</style>
<script type="text/javascript" src="http://o.aolcdn.com/dojo/1.6/dojo/dojo.xd.js" djConfig="parseOnLoad:true"></script>
<script type="text/javascript">
dojo.require("dojo.dnd.Source");
</script>
<script>
// <![CDATA[
dojo.ready(function()
{
dojo.provide("my.dojo.dnd.Source");
dojo.declare("my.dojo.dnd.Source", dojo.dnd.Source,
{
markupFactory: function(params, node)
{
params._skipStartup = true;
return new my.dojo.dnd.Source(node, params);
}
});
});
// ]]>
</script>
</head>
<body>
<ul dojoType="my.dojo.dnd.Source">
<li class="dojoDndItem">foo</li>
</ul>
</body>
</html>
在真正的应用程序中,扩展程序当然有用。此外,在真实的应用程序中,ul
实际上是table
,其内容可能会被基于用户操作的Ajax调用重复呈现。对于这篇文章,我试图将问题排除在其基本要素之外。
我不确定是否需要markupFactory
覆盖,但我看到它在其他示例中使用并认为可能是必要的。如果没有它,则报告相同的错误消息。
我怀疑是某个人在dojo.declare
生效之前尝试加载扩展类。如果我在dojo.provide
之外执行dojo.declare
和dojo.ready
,我会收到消息dojo.dnd is undefined
和_43.clsInfo.cls.prototype is undefined
,大概是因为dojo.require
是异步的
如果不是说<ul dojoType="my.dojo.dnd.Source">
我说<ul dojoType="dojo.dnd.Source">
而是使用setAttribute
在dojoType
函数中设置onReady
,那么错误消息就会消失。我不知道代码是否真正起作用。无论如何,由于Ajax重新渲染,这不会是一个可接受的解决方案,如上所述。
也许我错过了一些非常简单的事情。我将不胜感激任何帮助。谢谢。
答案 0 :(得分:0)
我通过以下方式终于得到了我想要的效果:
请参阅 简单。