HTML 在 dojo 小部件中显示为纯文本

Posted

技术标签:

【中文标题】HTML 在 dojo 小部件中显示为纯文本【英文标题】:HTML is shown as plain text in dojo widget 【发布时间】:2013-06-05 12:19:13 【问题描述】:

我有一个带有生成内容的 dojo 小部件,在我的例子中是文本消息。 消息文本是带有<b>, <i> 等标签的格式化文本。当我通过$messageText 将它放入我的小部件时,它显示为纯文本。

如何让我的小部件将所有这些标签解析为 DOM 节点?

更新 .jsp 片段:

<script>
(new MyWidget(
    text: "<b>message</b>"
).placeAt(dojo.byId("placeWidgetHere");
</script>

<div id="placeWidgetHere"></div>

小部件 .html 模板:

<div>$text</div>

【问题讨论】:

我认为您的问题出在其他地方。我刚刚通过创建一个 HTML 小部件对其进行了测试(Dojo 1.9),我可以使用 HTML 标记。示例:jsfiddle.net/tLqWd parser.parse() 是做什么的? 它将带有data-dojo-type 的HTML 代码转换为小部件。类似于配置选项:parseOnLoad: true. 【参考方案1】:

您可以在自定义小部件上使用attribute map,而不是使用substitution variables(不推荐)。

<div>
    <span data-dojo-attach-point="messageTextNode"></span>
</div>


declare('MyWidget'], [TemplatedMixin], 
    template: ...,

    messageText: '',
     _setMessageTextAttr:  node: "messageTextNode", type: "innerHTML" ,
);

new MyWidget(
    messageText: "<b>message</b>"
, "placeWidgetHere");

【讨论】:

什么是_setMessageTextAttr _setXXXAttr 是小部件的命名约定,当一个小部件使用名为 XXX 的属性实例化时,如果小部件上存在名为 _setXXXAttr 的方法,则会调用该方法。否则 XXX 值将直接设置到小部件上。 dojotoolkit.org/reference-guide/1.8/quickstart/…【参考方案2】:

问题在于messageText 将“”符号分别转换为“”。 我将 .replace(/&amp;lt;/g, "&lt;").replace(/&amp;gt;/g, "&gt;") 添加到 messageText 并开始正常工作。

感谢所有试图帮助我的人。

【讨论】:

以上是关于HTML 在 dojo 小部件中显示为纯文本的主要内容,如果未能解决你的问题,请参考以下文章

Dojo Validation TextArea 小部件在无效时如何突出显示?

Dojo 和 Ajax - 渲染小部件

ajax 请求后重新加载 dojo 小部件

Dojo Dijit - 小部件中的小部件

小部件上的 dojo 查询

如何让 cellWidgets 中的 dojo gridx dojo 小部件自动写入商店?