内部产量的RiotJS标签未更新

时间:2016-09-14 11:36:00

标签: javascript riot.js

使用yield和更新标记时出现问题,请参阅示例http://codepen.io/Pysta/pen/pEyoBY

<script type="riot/tag">
  <maintag>

    <yieldtag name='yield_tag'>
      <select>
        <option each={ items }>{ value }</option>
      </select>

    </yieldtag>


    var self = this;
    self.items = [
        {value:1},
        {value:2},
            {value:3},
        {value:4}
    ];
        self.items = [];

    this.on('mount', function () {
        var oReq = new XMLHttpRequest();
      oReq.addEventListener("load", reqListener);
      oReq.open("GET", "/api/category/0");
      oReq.send();
    });

    function reqListener(e) {
        console.log('load');
        self.items = [
        {value:1},
        {value:2},
            {value:3},
        {value:4}
      ];
        self.update(); 
    }

  </maintag>
</script>


<script type="riot/tag">
  <yieldtag>
    <yield />
  </yieldtag>
</script>

<maintag></maintag>

如果我立即加载数据(注释行带有&#34; self.items = [];&#34;)它可以正常工作,但当我发出请求并异步更新时没有什么变化。

如果我从维护内部删除了yieldtag,它就可以了。

任何帮助/建议表示赞赏。

1 个答案:

答案 0 :(得分:0)

如果您将each={ parent.items }更改为<yield />,它将按预期工作

<maintag>的混淆是您在<yieldtag>中编写模板逻辑,但是一旦安装了组件,您的代码实际上就在items中运行。 <maintag>数组存在于<yieldtag>的上下文中,安装后为 constructor(props){ super(props); var isActive = false; this.props.items.map(item => ( if(item.name == this.props.product.name) { isActive = true; } )); this.state = { active: isActive }; console.log(isActive); this.handleClick = this.handleClick.bind(this); } 的父级。

有关嵌套标记的更多信息,请参阅Riot docs

相关问题