我只需要重复标签5次。我阅读了文档,但没有意识到如何执行以下操作:

<some-tag>
   <star repeat={5} />
</some-tag>

我发现只有这种丑陋的方式:
<some-tag>
   <star each={stars} />

   this.stars = new Array(5);
</some-tag>

最佳答案

浏览了源代码之后,this可能会让您感兴趣。

如果计划使用each属性,则必须定义某种类型的数组,以便riot传递给forEach

这个jsfiddle是另一个想法(不是最佳选择),但是我认为它说明了这一点。另一个解决方案是使用Riot的mixin系统构建某种repeat属性:

https://jsfiddle.net/aunn3gt0/2/

在尝试使用<yield/>标记之前,这是一个很好的解决方案。然后可能需要进行调整。运作方式如下:

var repeat = {
  init: function() {
    var repeats = [],
        count = this.opts.repeat

    this.on('mount', function() {
      if (!count) return

      var impl = this.root.innerHTML
      this.root.removeAttribute('repeat')

      while(repeats.length < count) {
        var clone = this.root.cloneNode()
        this.root.parentNode.insertBefore(clone, this.root)
        clone.innerHTML = impl
        repeats.push(riot.mount(clone))
      }
    })

    this.on('unmount',function(){
      repeats.forEach(function(tag,i){
        tag.unmount()
      })
    })

  }
}

然后只需将其附加this.mixin(repeat)并按您期望的方式使用它:
<tag repeat="10">Repeated 10 times.</tag>

关于javascript - Riot.js如何重复标记一定次数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34384830/

10-09 22:19