【问题标题】:GO html/template: test equality of two dot variablesGO html/template:测试两个点变量的相等性
【发布时间】:2016-04-15 04:28:45
【问题描述】:

我正在发送这个模型的 html/模板:

type MapModel struct {
Networks      []*NetworkMeta
WaveKey       string

}

Networks 字段由另一种类型 NetworkMeta 定义:

type NetworkMeta struct {
NetworkMetaKey string

}

我使用 Networks 数组来生成一个 html 选择对象:

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

除了“if eq”相等性测试之外,这里的一切都有效。该测试返回错误:“WaveKey 不是结构类型 *models.NetworkMeta 的字段。”

据我了解 html/template eq 运算符,比较测试一个值与另一个(或一组值)的值,其中一个值与其他值之间用空格隔开。但是,在这种情况下,错误似乎表明对于字段,编译器会忽略空格。

有什么方法可以使这种平等发挥作用吗?我需要编写自定义函数吗?

感谢您的帮助。

【问题讨论】:

  • 两个字段必须在同一个结构中(是的,即使您正在迭代来自父级的切片)。据我所知,没有其他方法可以做到这一点。

标签: go go-html-template


【解决方案1】:

dot 正在遍历网络切片,因此它是 *NetworkMeta 类型。 NetworkMeta 没有 WaveKey 的任何字段。

自定义 func 可能是您想要的,因为您尝试访问来自不同范围的值。

【讨论】:

  • 啊...这很有帮助。事实上,快速搜索发现美元符号回到“前一个”点,这样就可以工作:{{ if eq .NetworkMetaKey $.WaveKey }} ... {{ end }}