正如您所提到的,mylongtext
它只是显示为一个字符串,它不是一个特定的元素,甚至不是标记。然而,我们可以做的是在我们的 observable 发生变化时自动调用一个函数。在回调中,我们创建一个基于字符串内容的DocumentFragment,然后将其插入到我们的 div 容器中。
<polymer-element name="my-element">
<template>
<div id="container">
</div>
</template>
<script ...></script>
</polymer-element>
@CustomTag("my-element")
class MyElement extends PolymerElement {
@observable string mylongtext = "bla bla <br> bla bla <strong> bla </strong>";
MyElement() {
// Bind property changes to the mylongtext observable string and
onPropertyChange(this, #mylongtext, addFragment);
}
// Need to do it on inserted to ensure we add the initial value.
void inserted() {
super.inserted();
addFragment();
}
void addFragment() {
var df = new DocumentFragment.html(mylongtext);
// In the clear any contents from container and add new fragment
$['container'].nodes..clear()..add(df);
}
}
请注意,onPropertyChange
自动$[..]
节点查找需要 Polymer dart 0.8.0 或更高版本(在以前的版本中分别bindProperty
使用和使用shadowRoot.query(..)
)。
但是要记住的一件事是,使用DocumentFragment.html()
和其他类似的 string-to-html 解析器是它们要受到 Sanitization 的影响,如本重大更改中所讨论的那样。