在 DOJO 中动态 Div

Dynamically Div in DOJO

我尝试在 DOJO 中动态创建 div,div 的数量取决于值 count Div 必须插入 <div data-dojo-type="dijit/layout/TabContainer" id="maintab" style="width:100%; height:100%;">

我的动态 divs 必须看起来像 <div data-dojo-type="dijit/layout/ContentPane" data-dojo-id="dtab" title="title" data-dojo-props="selected:false">(看来它是一个书签)

我的问题是如何使用特定的 data-dojo-typeidtitle make 函数 此刻我有 `

function myFunction() {
var node = dojo.doc.getElementById('maintab');
node.appendChild += "<div data-dojo-type='dijit/layout/ContentPane' data-dojo-id='testTab' title='test' data-dojo-props='selected:false' >sample text</div>";
}
`

您的 DOM API 用法无效。 appendChild 是您应该调用的函数,它接收一个 DOM 节点。将字符串连接直接应用于 appendChild 在该上下文中没有任何意义(并且连接 innerHTML,你可能会混淆它,无论如何都会变得非常笨拙)。

此外,您正在谈论动态添加声明性小部件标记,但以编程方式简单地创建每个 ContentPane 可能更有意义,也更直接。否则,您还需要 运行 构建声明性标记后的解析器。

将每个子 ContentPane 分配给相同的变量名也没有多大意义,这是您每次都设置相同的静态 data-dojo-id 时无意中所做的事情。

如果 maintab 已经被解析并实例化为 TabContainer,您可以执行以下操作(我假设是 Dojo 1.6 或更早的样式代码,因为这是您在上面使用的代码):

function addChild(title) {
    var container = dijit.byId('maintab');
    var child = new dijit.layout.ContentPane({ title: title });
    container.addChild(child);
    return child;
}

如果子窗口小部件的类型也可以不同,您也可以将其传入(此示例还假设您可能希望为每个子窗口部件传入不同的参数):

function addChild(Constructor, args) {
    var container = dijit.byId('maintab');
    var child = new Constructor(args);
    container.addChild(child);
    return child;
}
// Usage e.g. addChild(dijit.layout.ContentPane, { title: 'Hello' })

如果出于某种原因,您确实 need/want 在解析容器之前构造声明式 HTML,您可以执行如下操作:

function addChildMarkup(moduleId, argsString) {
    // Notice dojo.byId used here to retrieve DOM node
    // (vs. dijit.byId in earlier examples to retrieve widget instance)
    var container = dojo.byId('maintab');
    return dojo.create('div', {
        'data-dojo-type': moduleId,
        'data-dojo-props': argsString
    }, container);
}
// Usage: addChildMarkup('dijit.layout.ContentPane', '{ title: "Hello" }')