我在这里阅读了很多与 Go 模板相关的帖子,但找不到我要找的内容。
我有这两个结构,我无法更改它们,因为它们在我正在帮助的项目的其他地方使用:
type Schedule struct {
Description string
ControlNights int
PlayNights int
StartDay int
Combos []Combo
}
type Combo struct {
From time.Time
Every int
Until time.Time
Sounds []string
Volumes []int
Waits []int
}
Run Code Online (Sandbox Code Playgroud)
我需要在 html 页面上显示这些数据。所以我需要迭代每个 Combo。我可以做到这一点,但我需要将声音、音量和等待放在一起,即声音 x 音量 y 等待 z。其中 x、y 和 z 是 Sounds、Volumes 和 Waits 数组中的值。这些数组可以是 >= 1 的任意长度,但它们都具有相同的长度。
我希望它看起来像这样:
我已经尝试过这个:
{{range .Schedule.Combos}}
<div class="container">
<div class="row">
<div class="col">
<div class="card mt-2 ml-2">
<div class="card-body">
<h5 class="card-title">
<strong>Timing</strong>
</h5>
<h5 class="card-text">
Play every {{.Every}} mins
</h5>
<h5 class="card-text">
From time {{TimeOfDayToString .From}}
</h5>
<h5 class="card-text">
Until {{TimeOfDayToString .Until}}
</h5>
</div>
</div>
</div>
<div class="col">
<div class="card mt-2">
<div class="card-body">
<h5 class="card-title">
<strong>Sounds</strong>
</h5>
{{range .Sounds}}
<h5 class="card-text">
Sound {{.}}
</h5>
{{end}}
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
这允许我调整声音的范围,但我也需要调整音量并等待(等待播放下一个声音的时间),同时以某种方式......
我想我可以做的是创建一个不同的 Combo 结构并将其传递给我的 html 模板,但我希望如果有一种方法可以按原样使用结构来避免这种情况。
如果您确定这三个数组具有相同数量的元素,那么您可以这样做:
{{ $volumes := .Volumes }}
{{ $waits := .Waits }}
{{range $index,$sound := .Sounds }}
Print Sounds[i] like this: {{$sound}}
Print volumes[i] like this: {{index $volumes $index}}
Print waits[i] like this: {{index $waits $index}}
{{end}}
Run Code Online (Sandbox Code Playgroud)
这应该会给你一个想法。