23

これは一見単純ですが、私を狂わせます。

golang テンプレートのネストされた範囲内でスコープの上位にある構造体要素を参照するにはどうすればよいですか?

例:

type Foo struct {
  Id string
  Name string
}

type Bar struct {
  Id string
  Name string
}

var foos []Foo
var bars []Bar

// logic to populate both foos and bars

テンプレートでは:

{{range .foos}}
  <div>Foo {{.Name}}</div>
  <div>
    {{range ..bars}}
      <div>Bar {{.Name}} <input type="text" name="ids_{{..Id}}_{{.Id}}" /></div>
    {{end}}
  </div>
{{end}}

明らかに ..bars と ..Id は機能しませんが、私の意図が明確であることを願っています。Foo と Bar のすべての組み合わせを繰り返し処理し、Foo の Id と Bar の Id の両方によって作成された名前を持つフォーム要素を生成したいと思います。

問題は、次のことが不可能に見えることです。

  1. foos 範囲スコープのスコープ内からバーにアクセスする
  2. バーの範囲スコープ内から Foo の ID にアクセスする

両方の構造体に多数の冗長なフィールドを配置することで、これを一時的に回避できますが、これは私には非常に見苦しく、DRY に違反し、一般的に非常に間違っているように感じます。

私がやりたいことを行うためにgolangテンプレートを使用する方法はありますか?

4

1 に答える 1