Go шаблоны итерируют по нескольким массивам вместе - PullRequest
0 голосов
/ 22 октября 2019

Я прочитал здесь много постов, связанных с шаблонами Go, но не могу найти то, что ищу.

У меня есть эти 2 структуры, которые я не могу изменить, поскольку они используютсяВ другом месте в этом проекте я помогаю с:

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
}

И мне нужно отобразить эти данные на HTML-странице. Поэтому мне нужно перебирать каждую комбинацию. Что я могу сделать, но мне нужно, чтобы звуки, громкость и ожидание были в строках вместе, т.е. Где x, y и z - значения в массивах Sounds, Volume и Waits. Эти массивы могут иметь любую длину> = 1, но все они будут иметь одинаковую длину.

Я хочу, чтобы это выглядело так:

enter image description here

Я пробовал это:

            {{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>

И это позволяет мне варьироваться по звукам, но мне нужно также варьироваться по громкости и ждать (время ожидания до воспроизведения следующего звука),в то же время как-то ...

Я думаю, что я мог бы сделать, это сделать другую структуру Combo и передать ее в мой HTML-шаблон, но я надеялся избежать этого, если есть способ сделать это сструктурирует как есть.

1 Ответ

1 голос
/ 22 октября 2019

Если вы уверены , что эти три массива имеют одинаковое количество элементов, то вы можете сделать это:

{{ $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}}

Это должно дать вам идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...