dom - Dojo 动态创建 DOM 节点

标签 dom dojo

我正在尝试为我的应用程序创建自定义 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 的 anchor 标记中显示新闻文本,并将新闻链接显示为该 anchor 标记的 href

由于可以有多个新闻,我需要为每个新闻重复。我想以最好的方式做到这一点。我可以使用 dojo.create 或 dojo.place 为 News 的每个值手动创建 DOM。但这需要大量的硬编码。你能建议我最好的方法吗?是否可以在 Widget 模板本身中执行此操作?

最佳答案

最简单的方法是创建一个代表单个新闻项的私有(private)模板化小部件。

例如

dojo.declare('NewsItem',[dijit._Widget,dijit._Templated],{
  url:'',
  headline:'',
  //template abbreviated
  templateString:'<tr><td><a href="${url}>${headline}</a></td></tr>'
});

然后,当您从数据服务中检索新闻列表时,您只需遍历该数组的每个元素并创建一个新的 NewsItem 小部件并将其放置在您的 tbody 中,this.newsHomeTableTbody .

var newsArray = [...]
dojo.forEach(newsArray, function(newsLink){
  var newsItem = new NewsItem({
    url: newsLink.url,
    headline: newsLink.headline
  });
  newsItem.placeAt(this.newsHomeTableTbody);

},this);

关于dom - Dojo 动态创建 DOM 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8126546/

相关文章:

jquery - jQuery 包装集中元素的顺序是否始终与元素在标记中出现的顺序匹配?

jQuery 仅选择子级直到特定类

javascript - 帮助我理解 DOM 中的对象

javascript - 为什么 FF3 说 "Permission denied to get property HTMLDivElement.tagName"?

可以悬停并单击的 Javascript/CSS 工具提示

javascript - DOJO:延迟加载 LazyTreeGrid 中的节点 - 寻找示例代码

javascript - 我的RIA应该使用什么建筑模式?

javascript - 为什么 Webkit 不能正确重绘我的网页?

ajax - 如何维护 Ajax 刷新页面上的复选框状态?

Dojo 和注销小部件