Бунтовать каждый тег сборки HTML
Я новичок в Riot.js и у меня проблема с созданием HTML-элементов из объектов. У меня есть такая структура:
var self = this;
self.objects = [
{ tag: "h1", text: "hello" },
{ tag: "h2", text: "world" }
];
И я хочу в браузере получить что-то подобное
<h1>hello</h1>
<h2>world</h2>
это то, что у меня есть
<virtual each={objects}><{ tag }> { text } </{ tag }></virtual>
и это дает мне
"<h1>hello<h1>"
"<h2>world<h2>"
Как я могу удалить "
кавычки? Или как я могу улучшить свой код для отображения на странице реального HTML-тега, а не строки?
1 ответ
Решение
Выражения Riot могут отображать только текстовые значения без форматирования HTML. Однако вы можете сделать собственный тег для выполнения этой работы.
Создать кастом raw
тег:
<raw>
<script>
this.root.innerHTML = opts.content
</script>
</raw>
Используйте его для рендеринга HTML:
<raw content="{'<' + tag + '>' + text + '</' + tag + '>'}" each="{ objects }" />
<script>
this.objects = [
{ tag: 'h1', text: 'hello' },
{ tag: 'h2', text: 'world' }
];
</script>
Можно избавиться от упаковки raw
пометить с помощью virtual
тег & data-is
сочетание:
<virtual data-is="raw" content="{'<' + tag + '>' + text + '</' + tag + '>'}" each="{ objects }" />
Пример из жизни: http://plnkr.co/edit/ZQxJNfqvdSvWpMk8z0ej?p=preview