2016-04-14 8 views
1

私はこのモデルのhtml /テンプレートを送信しています:GO HTML /テンプレート:2つのドット変数のテスト平等

type MapModel struct { 
Networks  []*NetworkMeta 
WaveKey  string 

}

がネットワークフィールドは、別のタイプ、NetworkMetaによって定義されます

type NetworkMeta struct { 
NetworkMetaKey string 

}

私は、HTMLの選択オブジェクトを生成するネットワーク・アレイを使用する:

  <select name="waveKey" id="waveKey"> 
    {{range .Networks}} 
      <option value="{{ .NetworkMetaKey}}" {{if eq .NetworkMetaKey .WaveKey }} selected="selected" {{end}}> 
      {{ .NetworkMetaKey }} 
      </option> 
    {{end}} 

"if eq"の等価性テスト以外はすべてここで動作します。このテストでは、「WaveKeyはstruct * models.NetworkMetaのフィールドではありません」というエラーが返されます。

私はhtml/template eq演算子を理解していますので、比較はある値を別の値(または値のグループ)、つまり残りの部分と空白で区切ってテストします。ただし、この場合、エラーは、フィールドの場合、コンパイラはスペースを無視することを示しているようです。

この平等作業を行う方法はありますか?カスタム関数を書く必要がありますか?

ありがとうございました。

+0

両方のフィールドが同じ構造体にある必要があります(親からのスライスを反復処理している場合でもそうです)。私の知る限り、これを行う方法は他にありません。 –

答えて

1

ドットはNetworksのスライスを反復しているので、タイプは* NetworkMetaです。 NetworkMetaにはWaveKeyのフィールドはありません。

さまざまなスコープの値にアクセスしようとしているので、カスタム関数が必要な場合があります。

+1

ああ...これは参考になります。確かに、クイックサーチは、ドル記号が「前の」ドットに戻ってきて、これがうまくいくという考えを示しました:{{if eq .NetworkMetaKey $ .WaveKey}} ... {{end}} – Brent

関連する問題