2011-05-07 23 views
0

下面的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.providedojo.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設置dojoTypeonReady功能,該錯誤信息消失。我不知道代碼是否實際上變成了功能。無論如何,由於Ajax重新渲染,這並不是一個可接受的解決方案,正如我上面提到的。

也許我錯過了一些非常簡單的東西。我將不勝感激任何幫助。謝謝。

回答

0

我終於得到了我想要做以下的效果:

  • 設置parseOnLoad爲false,而不是真實的。
  • 定義一個'reparse'函數,用於在相應的DOM節點上設置新的dojoType並重新分析相應的DOM子樹(使用dojo.parser.parse)。
  • 在dojo.ready函數和每個Ajax重新呈現之後調用重新分析。

看,它簡單。

相關問題