2013-01-12 54 views
0

我有一個簡單的小工具:我無法將Dojo小部件在頁面

define(["dojo/_base/declare", "dijit/_WidgetBase", "dojo/dom-construct"], 
function(declare, WidgetBase, domConstruct){ 

    return declare("gijit.workflow.debug.combi", [WidgetBase], { 
     startup: function(){ 
      alert("started"); 
     }, 
     buildRendering: function(){ 

      var container = domConstruct.create("div", {innerHTML:"test"}, this.domNode, "first"); 
      var rad1 = domConstruct.create("input", {type:"radio"}, container, "first"); 
      var rad1 = domConstruct.create("input", {type:"radio"}, container, "last"); 
     } 
    }); 
}); 

和一個簡單的載入頁面:

<!DOCTYPE html> 
<html > 
<head> 

<link rel="stylesheet" href="../../../css/tcs-style-dijit.css" /> 

<script>dojoConfig = {parseOnLoad: false}</script> 
<script src="../../../js/dojo/dojo.js" data-dojo-config="async: true"></script> 
<!-- <script src="../../../js/gijit/workflow/debug/combi.js"></script> --> 
<script> 
require(["dojo/dom", "gijit/workflow/debug/combi", "dojo/parser", 
     "dojo/_base/window"], function(dom, combi, parser, window) { 
    var widget = new combi(); 
    widget.placeAt(window.body()); 
// widget.startup(); 
}); 
</script> 
</head> 
<body id="dd" class="tcs"> 
</body> 
</html> 

不過,我得到以下錯誤:

組件返回失敗代碼:0x80004003(NS_ERROR_INVALID_POINTER)[nsIDOMHTMLBodyElement.appendChild] 域「> HTTP:// 端口 /js/dojo/dojo.js 線15

我已分離出錯誤的地方,我嘗試把在HTML中插件的一點:

widget.placeAt(window.body()); 

我不能找出是什麼原因造成的問題,並希望得到一些幫助

回答

1

目前您調用window.body() DOM尚未解析,因此它返回undefined。需要dojo/domReady!插件作爲最後一個模塊加載:

require([ 
    "dojo/dom", 
    "gijit/workflow/debug/combi", 
    "dojo/parser", 
    "dojo/_base/window", 
    "dojo/domReady!" // ==> wait for the DOM to be ready 
], function(dom, combi, parser, win) { 
    var widget = new combi(); 
    widget.placeAt(win.body()); 
    widget.startup(); 
}); 

請注意,作爲最佳做法,我建議沒有被分配dojo/_base/window模塊到本地window變量隱藏window對象,請使用win代替。

相關問題