下面的XHTML,真正的應用程序,導致螢火蟲報告「無法加載類「my.dojo.dnd.Source」的一個巨大的簡化:如何在標記中使用擴展的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.ready
之外執行dojo.provide
和dojo.declare
,我會收到消息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重新渲染,這並不是一個可接受的解決方案,正如我上面提到的。
也許我錯過了一些非常簡單的東西。我將不勝感激任何幫助。謝謝。