至於你提到,mylongtext
簡單地顯示爲一個字符串,它沒有具體的元素,甚至標記。然而,我們可以做的就是在我們的觀察值被改變時自動調用一個函數。在回調中,我們創建一個基於字符串內容的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
和$[..]
自動節點的發現需要聚合物鏢0.8.0或更高(在以前的版本是bindProperty
和分別使用shadowRoot.query(..)
)。
但有一點需要注意的是,使用DocumentFragment.html()
和其他類似的字符串到html解析器是,它們受到消毒處理,如this breaking change中所述。
這仍然是一樣的。我創建了這樣一個元素的Polymer 1.0版本。源代碼可以在''的[GitHub repo](https://github.com/bwu-dart/bwu_bind_html) –