我有以下代码:

<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-ishttp://riotjs.com/guide/#html-elements-as-tags进行工作(不幸的是,关于此的适当文档似乎很少)。

10-02 11:50