html – 使用gorillaschema解包字段

html – 使用gorillaschema解包字段,第1张

概述我正在使用 gorilla/schema将r.PostForm解压缩到一个结构中. 我的问题是,我正试图找出一种“明智”的方法来获得< select>的选定值.元素以一种允许我轻松使用html / template重新选择字段的方式(即从会话中重新填充表单时),注意到没有一种简单的方法来测试相等性并且只是通过传递一个实例RenderTemplate的结构. 为了说明我的所作所为: type Lis 我正在使用 gorilla/schema将r.PostForm解压缩到一个结构中.

我的问题是,我正试图找出一种“明智”的方法来获得< select>的选定值.元素以一种允许我轻松使用HTML / template重新选择字段的方式(即从会话中重新填充表单时),注意到没有一种简单的方法来测试相等性并且只是通过传递一个实例RenderTemplate的结构.

为了说明我的所作所为:

type Listing struct {    ID           string        `schema:"-"`    Title        string        `schema:"Title"`    Company      string        `schema:"company"`    Location     string        `schema:"location"`        ...    Term         string        `schema:"term"`}
if r.Method == "POST" {// error handling code removed for brevity,but trust me,it exists!    err = r.ParseForm()    err = decoder.Decode(Listing,r.PostForm)    err = Listing.ValIDate() // checks fIEld lengths as I'm using a schema-less datastore
<label for="term">Term</label>      <select data-placeholder="Term...?" ID="term" name="term" required>        <option name="term" value="full-time">Full Time</option>        <option name="term" value="part-time">Part Time</option>        <option name="term" value="contract">Contract</option>        <option name="term" value="freelance">Freelance</option>      </select>

…当我将列表实例传递给模板时,我希望能够做什么:

renderTemplate(w,"create_Listing.tmpl",M{        "Listing":              Listing,})
<label for="term">Term</label>          <select data-placeholder="Term...?" ID="term" name="term" required>            <option name="term" value="full-time" {{ if .term == "full-time" }}selected{{end}}>Full Time</option>            <option name="term" value="part-time"{{ if .term == "part-time" }}selected{{end}}>Part Time</option>            <option name="term" value="contract" {{ if .term == "contract" }}selected{{end}}>Contract</option>            <option name="term" value="freelance" {{ if .term == "freelance" }}selected{{end}}>Freelance</option>          </select>

显然这不起作用.我已经将template.FuncMap视为一种可能的解决方案,但是当我想将整个列表实例传递给模板时(即代替逐个字段),我不确定如何使用它.如果可能的话,我也希望最小化我的struct中不必要的字段.我可以为每个值设置布尔字段(即Fulltime bool,但是如果用户返回并编辑内容,我需要代码将其他字段更改为“false”.

有没有办法以与template / HTML的限制很好地融合的方式实现这一目标?

解决方法 您可以编写一个视图来构建并表示一个select元素:

{{define "select"}}    <select name="{{.name}}>        {{range $a,$b := .Options}}             <option value="{{print $a}}" {{if $a == .Selected}}>{{print $b}}</option>        {{end}}    </select>{{end}}

以及相应的数据结构:

type SelectBlock struct {    name     string    Selected string    Options  map[string]string}

然后实例化它:

termSelect := SelectBlock{    name:     "term",Selected: "",Options:  map[string]string{        "full-time": "Full Time","part-time": "Part Time","contract":  "Contract","freelance": "Freelance",},}

并设置Selected字段:

termSelect.Selected = "full-time"

并在表单视图中输出视图片段:

{{template "select" $termSelect}}

其中$termSelect将是您的SelectBlock实例.

总结

以上是内存溢出为你收集整理的html – 使用gorilla / schema解包字段全部内容,希望文章能够帮你解决html – 使用gorilla / schema解包字段所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1043120.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存