Dojo动态创建DOM节点

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小部件

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