如何在 Markojs 中渲染原始 HTML?

How do I render raw HTML in Markojs?

我正在使用 Markojs 作为我的 UI 库,我需要渲染包含在从服务器检索的数据模型中的原始 HTML。

例如,假设我从服务器检索的数据模型如下所示:

data = {
    copy: "<p class='myClass'>Hello World!</p>"
}

我希望能够在我的 Marko 模板中渲染我的副本,如下所示:

.copy
    ${input.data.copy}

并让它正确呈现 HTML 元素,但它并没有按预期工作。它确实呈现到页面上,但它还在页面上显示 "<" 之前和之后的 ">" 作为文本。

看起来 this 是我需要的功能,但已被弃用。执行此操作的正确方法是什么?

解决方法如下:

.copy -- $!{input.data.copy}

Marko 默认转义文本值,但您可以使用 $!{input.data.copy}(注意 !)告诉 Marko 您需要原始的 HTML。

https://markojs.com/docs/syntax/#dynamic-text

当你这样做时,你实际上是在关闭 Marko 的安全功能,所以请确保如果你获得的任何动态内容来自不安全的来源,它会被转义到其他地方以防止代码防止被注入您的页面。