Dojo HTML 模板:在 HTML 模板中重复一段 HTML

Posted

技术标签:

【中文标题】Dojo HTML 模板:在 HTML 模板中重复一段 HTML【英文标题】:Dojo HTML template: repeating a piece of HTML inside the HTML template 【发布时间】:2014-01-15 17:24:08 【问题描述】:

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

道场小部件:

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
););

HMTL 模板:

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

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

谢谢。

【问题讨论】:

也许你应该让你的问题更具体(展示一个示例模板、数据等)。 我添加了新的细节。 始终将对象和数组放在构造函数中,否则这些函数将全局可用(内存泄漏)。 【参考方案1】:

据我所知:没有。 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(不带美元符号)。

【讨论】:

非常感谢您提供此信息。我设法使用你的小教程让它按我想要的方式工作。很棒的东西。

以上是关于Dojo HTML 模板:在 HTML 模板中重复一段 HTML的主要内容,如果未能解决你的问题,请参考以下文章

dojo dijit 额外模板连接事件

请求已内联 Dijit 模板的 Dojo 构建

dojo - 模板中的单击事件不起作用

在 Golang 的 HTML 模板中使用 Vue.js [重复]

如何告诉 Dojo 构建忽略“缺失”模板

IBM Worklight - 无法在 Dojo 应用程序中加载 index.html