2009-07-23 62 views
4

我想要使用dojo.NodeList.instantiate方法獲取dijits,該方法需要現有的HTML元素,並在DOM加載時將其轉換爲dijits。無法通過dojo.NodeList.instantiate創建dijits

instantiate方法的API參考可以找到here

下面的例子,它調用instantiate方法在dojo.addOnLoad方法,應該創建一個BorderContainer有兩個ContentPane實例,但的DIV仍當他們開始了,並不會成爲dijit的:

<!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> 
    <title>Dijit Test</title> 
    <style type="text/css"> 
     @import "dojoroot/dijit/themes/tundra/tundra.css"; 
     @import "dojoroot/dojo/resources/dojo.css"; 
    </style> 
    <script type="text/javascript" src="dojoroot/dojo/dojo.js" 
     djConfig="parseOnLoad: true"></script> 
    <script type="text/javascript"> 
     dojo.require("dijit.layout.BorderContainer"); 
     dojo.require("dijit.layout.ContentPane"); 

     dojo.addOnLoad(
      function() { 
       dojo.query("#divOuter").instantiate(
        dijit.layout.BorderContainer, { 
         design : 'sidebar', 
         gutters : false 
        } 
       ); 

       dojo.query("#divMiddle").instantiate(
        dijit.layout.ContentPane, { 
         region : 'center' 
        } 
       ); 

       dojo.query("#divRight").instantiate(
        dijit.layout.ContentPane, { 
         region  : 'right', 
         splitter : true 
        } 
       ); 
      } 
     ); 
    </script> 
</head> 
<body> 
    <div id="divOuter" style="width:400px;height:300px"> 
     <div id="divMiddle">Middle box</div> 
     <div id="divRight">Right box</div> 
    </div> 
</body> 
</html> 

我已經在Firefox 3.5和Internet Explorer 7中嘗試了上述代碼,並且都無法呈現dijits。如果我指定在屬性對象中的標準HTML屬性(如style屬性),這種風格變化正確顯示,這表明對象被讀取:

// The red border appears when using this example 
dojo.query("#divRight").instantiate(
    dijit.layout.ContentPane, { 
     region  : 'right', 
     splitter : true, 
     style  : 'border:1px solid red' 
    } 
); 

以下HTML(使用dojoType和其他屬性的屬性)正常工作 - 在與使用BorderContainer正確ContentPanes同時出現在瀏覽器:

<div dojoType="dijit.layout.BorderContainer" design="sidebar" gutters="false" 
     style="width:400px;height:300px"> 
    <div dojoType="dijit.layout.ContentPane" region="center">Middle box</div> 
    <div dojoType="dijit.layout.ContentPane" region="right" splitter="true" 
     style="width:200px;">Right box</div> 
</div> 

請誰能告訴我,爲什麼instantiate例如不工作?

我做了很多搜索,但似乎無法找到任何其他人與此問題,這可能意味着我沒有正確使用instantiate方法!

謝謝。

回答

2

您需要在實例化這些dijits之後調用啓動。 dojo.query.instantiate不會爲你做,因爲它只是創建對象。

在你的onLoad功能的底部,添加這些:

dijit.byId('divOuter').startup(); 
dijit.byId('divMiddle').startup(); 
dijit.byId('divRight').startup(); 
+0

非常感謝塞斯 - 現在所有的工作! – user143565 2009-07-27 13:06:43

相關問題