Javascript Riot.js如何重复标记一定次数?

Javascript Riot.js如何重复标记一定次数?,javascript,riot.js,Javascript,Riot.js,我只需要重复标记5次。我阅读了文档,但没有意识到如何做这样的事情: <some-tag> <star repeat={5} /> </some-tag> 我只发现了这个丑陋的方式: <some-tag> <star each={stars} /> this.stars = new Array(5); </some-tag> this.stars=新阵列(5); 在查看源代码后,您可能会感兴趣 如

我只需要重复标记5次。我阅读了文档,但没有意识到如何做这样的事情:

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

我只发现了这个丑陋的方式:

<some-tag>
   <star each={stars} />

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

this.stars=新阵列(5);

在查看源代码后,您可能会感兴趣

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

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

在您尝试使用
标记之前,这是一个很好的解决方案。那么它可能需要调整。下面是它的工作原理:

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()
      })
    })

  }
}

与您的建议类似,您可以在模板中正确执行此操作:

<some-tag>
   <star each="{(NOTHING, i) in Array(state.repeatCount)}" />
</some-tag>

在本例中,
i
包含索引

<some-tag>
   <star each="{(NOTHING, i) in Array(state.repeatCount)}" />
</some-tag>