Dojo动态创建DOM节点
我正在尝试为我的应用程序创建一个自定义Dojo小部件Dojo动态创建DOM节点,dom,dojo,Dom,Dojo,我正在尝试为我的应用程序创建一个自定义Dojo小部件 <!-- Dojo widget Template --> <div class="newsHomeWidget"> <table width="100%" cellspacing="0" cellpadding="0"> <tbody dojoAttachPoint="newsHomeTableTbody"> <!-- May be we
<!-- Dojo widget Template -->
<div class="newsHomeWidget">
<table width="100%" cellspacing="0" cellpadding="0">
<tbody dojoAttachPoint="newsHomeTableTbody">
<!-- May be we need to repeat this code dynamically -->
<tr>
<td class="ncmseparate">
<a class="wordwrap" dojoAttachPoint="newsHomeLink"></a>
</td>
</tr>
</tbody>
</table>
</div>
此小部件用于显示我从服务中获取的新闻列表。我将以JSON
格式获取数据。我需要在类为wordWrap
的锚定标记中显示新闻文本,并将指向新闻的链接显示为该锚定标记的href
因为可以有多条新闻,所以我需要重复每一条新闻。我想用最好的方式做这件事。我可以使用dojo.create或
dojo.place
为每个新闻值手动创建DOM,但这需要大量的硬编码。你能告诉我最好的方法吗?是否可以在小部件模板本身中执行此操作?最简单的方法是创建一个表示单个新闻项目的私有模板小部件
比如说
dojo.declare('NewsItem',[dijit._Widget,dijit._Templated],{
url:'',
headline:'',
//template abbreviated
templateString:'<tr><td><a href="${url}>${headline}</a></td></tr>'
});
谢谢你的回复。一个问题。在下面的代码“newsItem.placeAt(this.newsHomeTableTbody);”中,“this”将是全局作用域,对吗?如果是这样,我如何才能访问NewsHomeTableyBody?dojo.forEach函数接受数组、函数和可选的第三个scope参数。我的印象是,这段代码将在自定义模板小部件中执行,因此我使用
this
作为dojo.forEach函数调用的第三个参数。如果您正在其他地方创建新闻项
,则可以同样轻松地传入自定义小部件的实例:dojo.forEach(newsArray、newItemCreationFunction、InstanceofNewHomeWidget)代码>我能够构造这个小部件。谢谢你的帮助。但在我的鳕鱼里,这就是我正在做的。
,并将动态元素插入到“newsContentTable”中。但这是一个完整的小部件吗?我需要有这个小部件的工作上述结构?如何改进它?从设计角度来看,NewsItem
widget类与常规的News
widget紧密耦合。如果不了解事物的更大视角,就很难说如何改进它。我明白,可能是改变结构对我有帮助吧;使用div而不是表。您使用的是哪个版本的Dojo?(1.7与之前版本有一些主要区别。)
var newsArray = [...]
dojo.forEach(newsArray, function(newsLink){
var newsItem = new NewsItem({
url: newsLink.url,
headline: newsLink.headline
});
newsItem.placeAt(this.newsHomeTableTbody);
},this);