0

私は単純なウィジェットを持っています:

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] domain">http:// domain : port /js/dojo/dojo.js 15 行目

ウィジェットを HTML に配置しようとするところまでエラーを切り分けました。

widget.placeAt(window.body());

問題の原因を突き止めることができず、助けていただければ幸いです

4

1 に答える 1

1

呼び出した時点ではwindow.body()、DOM はまだ解析されていないため、 が返されますundefineddojo/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();
});

ベスト プラクティスとして、モジュールをローカル変数にwindow割り当ててオブジェクトを非表示にしないことをお勧めします。代わりに使用してください。dojo/_base/windowwindowwin

于 2013-01-13T07:33:46.973 に答える