2010-12-11 72 views
0

我成功使用dojo.dnd.Source和從我的web服務器加載的Dojo 1.4.3。但是,由於共享主機或其他原因,加載速度非常緩慢。 (偶爾也有類似1分30秒的事情)Dojo.dnd.source從Google apis遷移到dojo 1.5時停止工作

所以我現在試圖切換到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選項,但沒有運氣。我還能嘗試什麼?

回答

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()純粹是因爲我的個人喜好。它們是同義詞,可以互換使用。

+0

工作完美! – Rythmic 2010-12-11 14:06:13