如何在Dojo窗口小部件中的另一个模板中包含模板?

时间:2017-02-10 17:40:33

标签: javascript templates dojo

我尝试使用以下模板模型执行此操作:

<div>
    <div data-dojo-attach-point="includeHere"</div>
</div>

<div>
    ${includeHere}
</div>

然后在课堂上我认为应该是这样的:

define([
    "dojo/_base/declare",
    "dijit/_WidgetBase",
    "dijit/_TemplatedMixin",
    "dojo/text!./templates/myWidget.html",
    "dojo/text!./templates/templateToBeIncluded.html"
], function (
    declare,
    _WidgetBase,
    _TemplatedMixin,
    template,
    templateToBeIncluded
) {
        return declare([_WidgetBase, _TemplatedMixin], {
            templateString: template,

            buildRendering: function() {
                this.includeHere = templateToBeIncluded;
            },

        });
});

我收到_TemplatedMixin源代码,并尝试按照_TemplatedMixin的方式更改buildRendering函数:

buildRendering: function() {
    domConstruct.toDom(templateToBeIncluded, this.includeHere);
},

但是,它也无法发挥作用。这样做的正确方法是什么?我不想在我的.js文件中包含HTML。我想只在模板中使用HTML。

1 个答案:

答案 0 :(得分:1)

我解决了。首先,当我在buildRendering方法中简单地引入this.inherited(arguments);时,它起作用,但HTML没有呈现。它作为原始HTML在页面中出现。所以我尝试将模板中的变量更改为$ {!includeHere)。一旦我这样做,HTML就会正确呈现。

但是仍然存在子模板中的替换变量没有渲染的问题,所以我将buildRendering方法更改为:

buildRendering: function() {
    this.includeHere = string.substitute(templateToBeIncluded, this, (v) => v);
    this.inherited(arguments);
},

这一切都很好。