javascript - Dojo HTML 模板 : repeating a piece of HTML inside the HTML template

标签 javascript html dojo

我在单独的 .html 文件中有一个基于模板的 dojo 小部件和一个 HTML 模板。

Dojo 小部件:

define("dojow/SomeWidgetName",[
"dojo/_base/declare",
"dijit/_WidgetBase",
"dijit/_TemplatedMixin",
"dojo/text!./templates/MyHTMLFile.html"], function(declare, _WidgetBase, _TemplatedMixin, template) {

return declare([_WidgetBase, _TemplatedMixin], {
    templateString: template,
    baseClass: 'dojowBaseClass',
    details:{} // THIS IS THE OBJECT THAT WILL BE LOOPED
    //  your custom code goes here
});});

HTML 模板:

<table> 
  <tr>
     <td>SomeService</td>
     <td>someUsername</td>
  </tr> </table>

我需要的是根据我在 dojo 小部件中拥有的“详细信息”对象重复表格的行,因此每一行都包含来自该对象的数据。这可能吗?

谢谢。

最佳答案

据我所知:没有。 Dojo 的模板语言非常基础,仅提供可用于以编程方式更改它的附加点/事件。这是 Dojo 的缺点/弱点之一(与 Handlebars 等模板引擎相比),甚至前核心提交者也这么认为。


因此,创建循环结构的另一种方法是以编程方式创建循环结构。假设我们的模板如下:

<ul data-dojo-attach-point="listNode"></ul>

然后您可以在您的代码中执行以下操作:

domConstruct.create("li", {
    innerHTML: "test"
}, this.listNode);

这将导致以下 HTML:

<ul data-dojo-attach-point="listNode">
    <li>test</li>
</ul>

因此您可以将它放在代码的循环中(并创建许多子项),但如您所见,模板语言本身缺少这样的功能。


如果你想加载“一个模板”,你可以定义一个子项模板,并使用:

domConstruct.place(lang.replace("<li>{text}</li>", {
    text: "test"
}), this.listNode);

小提示:dojo/_base/lang 与widget 模板不一致。模板化小部件中的占位符编写为 ${placeholder,但在 dojo/_base/lang 中,占位符定义为 {placeholder}(没有美元符号)。

关于javascript - Dojo HTML 模板 : repeating a piece of HTML inside the HTML template,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21144163/

相关文章:

javascript - 以编程方式在 BorderContainer 中创建的 AccordionContainer 存在大小问题

dojo - 获取元素内的所有小部件

php - JavaScript 表单验证 - 函数未在提交时运行。

javascript - 单击元素后工具提示没有隐藏(bootstrap v5.0)

html - css 根本不适用

javascript - 下拉弹跳问题

javascript - 如何将 ids 列表传递给 mysql 从 NodeJs 删除查询

Javascript:动态添加的脚本无法在另一个脚本中找到先前定义的函数

javascript - 如果某个字段具有值 jQuery,则从多个表单中序列化某个表单的表单数据

javascript - 是否可以通过按钮开始下载 dom 元素?