Riotjs 嵌套标签选项未定义

Riotjs nested tags options are undefined

我正在使用 riotjs 库并有两个标签 "comment-list" 和 "comment"。

评论列表:

<comment-list>
    <div each={com in comments} >
        <comment level={opts.level} comment={com} type={opts.level == 0 ? "parent" : "child"} ctype={commentType}></comment>
    </div>

    <div show={opts.level == 0}>
        <a id="load-trigger" onclick={fetchMore}>Moar comments</a>
    </div>


    var self = this;
    self.commentType = (self.opts.level === 0 ? "parent" : "child");
</comment-list>

和评论:

<comment>
    ... some html ...

    <div class="row" if={opts.level == 0}>
      <div class="col s11 offset-s1 m11 offset-m1 l11 offset-l1" style="padding-left: 0;">
        <comment-list level={1} fetchMore={fetchMore}></comment-list>
      </div>
    </div>
</comment>

comment-list.tag初始化为level = 0,应该将这个level值传递给comment.tag。问题是当我尝试在 comment.tag 中访问 opts.level 时,我得到 'undefined'。 ctype 也是如此。 type 总是 "child" 就好像 comment-list.tag 中的 opts.level 没有定义。

Ps:我不认为这可能是由于评论列表中的 0 被视为 null 或 'undefined',因为我有相同的行为,例如值 1 我直接从 opts 对象传递值是不是做错了什么?

each 创建一个子作用域,因此您需要查看父作用域。

{opts.level}更改为{parent.opts.level}

所以您的 <comment-list> 是您当前的范围,您的 each={com in comments} 创建了一个子范围。您的 opts.level 属于 current/parent,而不属于已迭代的单个范围。

https://github.com/riot/riot/issues/1720

这是我今年早些时候针对这个确切问题提出的 github 问题。