无法创建通过dojo.NodeList.instantiate的dijits(Cannot crea

2019-09-20 09:17发布

我想获得的dijits使用渲染dojo.NodeList.instantiate方法,这需要现有的HTML元素,并在DOM加载它们变成dijit的。

对于API参考instantiate的方法可以找到这里 。

下面的例子,它调用instantiate方法在dojo.addOnLoad方法,应该创建一个BorderContainer有两个ContentPane情况下,但仍然资料核实,他们开始了,并不会成为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正确方法!

谢谢。

Answer 1:

你需要他们被实例化后,打电话给那些dijit的启动。 dojo.query.instantiate不会为你做它,因为它刚刚创建的对象。

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

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


文章来源: Cannot create dijits via dojo.NodeList.instantiate
标签: dojo