Как вы упоминаете, 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) '' –