use*_*269 2 html javascript 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
});});
Run Code Online (Sandbox Code Playgroud)
HMTL模板:
<table>
<tr>
<td>SomeService</td>
<td>someUsername</td>
</tr> </table>
Run Code Online (Sandbox Code Playgroud)
我需要的是根据我在dojo小部件中的"details"对象重复表的行,因此每行包含来自该对象的数据.那可能吗?
谢谢.
据我所知:没有.Dojo的模板语言非常基础,只提供可用于以编程方式更改它的附加点/事件.这是Dojo的缺点/弱点之一(与Handlebars之类的模板引擎相比),甚至前核心通勤者都这么认为.
因此,创建循环结构的另一种方法是以编程方式创建循环结构.假设我们的模板如下:
<ul data-dojo-attach-point="listNode"></ul>
Run Code Online (Sandbox Code Playgroud)
然后,您可以在代码中执行以下操作:
domConstruct.create("li", {
innerHTML: "test"
}, this.listNode);
Run Code Online (Sandbox Code Playgroud)
这将导致以下HTML:
<ul data-dojo-attach-point="listNode">
<li>test</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
所以你可以将它放在代码中的循环中(并创建许多子项),但正如你所看到的,模板语言本身缺乏这样的功能.
如果要加载"模板",可以定义子项模板,并使用以下命令加载它:
domConstruct.place(lang.replace("<li>{text}</li>", {
text: "test"
}), this.listNode);
Run Code Online (Sandbox Code Playgroud)
小注意:dojo/_base/lang与小部件模板不一致.模板化窗口小部件${placeholder中dojo/_base/lang的占位符编写为,但占位符定义为{placeholder}(没有美元符号).