我有以下代码:
<my-tag>
<script>
var self = this;
riot.route('/test', function() {
self.root.innerHTML = '<some-riot-tag></some-riot-tag>';
self.update();
});
</script>
</my-tag>
如果我不添加JS就可以使用它:
<my-tag>
<some-riot-tag></some-riot-tag>
</my-tag>
如何使用JavaScript进行这项工作?标记已添加到DOM;但是,它不会更新。
编辑:零钱。
最佳答案
我认为您的解决方案存在的问题是Riot不会通过JavaScript将插入的HTML解析为Riot标签。不同的方法可能会更好,例如:
<my-tag>
<some-riot-tag if="{ route == 'test' }" />
<other-riot-tag if="{ route == 'bar' }" />
<script>
var self = this;
riot.route('/test', function() {
self.route = 'foo';
self.update();
});
riot.route('/bar', function() {
self.route = 'bar';
self.update();
});
</script>
</my-tag>
另一种方法可能是使用
riot-tag
属性(我没有测试过,但是应该可以):<my-tag>
<div riot-tag="{ tagName }"></div>
<script>
var self = this;
riot.route('/test', function() {
self.tagName = 'some-riot-tag';
self.update();
});
riot.route('/bar', function() {
self.tagName = 'other-riot-tag';
self.update();
});
</script>
</my-tag>
编辑:似乎
riot-tag
在不久的将来会被弃用,但是该解决方案仍可以使用data-is
:http://riotjs.com/guide/#html-elements-as-tags进行工作(不幸的是,关于此的适当文档似乎很少)。