Я использую gorilla/schema, чтобы распаковать r.PostForm
в структуру.
Моя проблема в том, что я пытаюсь найти «разумный» способ получить выбранное значение элемента <select>
таким образом, чтобы я мог легко использовать html/template
для повторного выбора поля (т.е. при повторном заполнении формы из сеанс), отметив, что нет простого способа проверить равенство and, просто передав экземпляр структуры в 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
как возможное решение, но я не уверен, как я могу использовать это, когда я хочу передать весь экземпляр списка в шаблон (т.е. вместо поля за полем). Я также хочу, если возможно, свести к минимуму ненужные поля в моей структуре. Я мог бы иметь логические поля для каждого значения (например, Fulltime bool
, но тогда мне нужен код, чтобы изменить другие поля на «false», если пользователь вернется и редактирует что-то.
Есть ли способ добиться этого таким образом, чтобы он хорошо сочетался с ограничениями template/html
?
<textarea>
превышает лимит файлов cookie в 4 КБ. - person elithrar   schedule 21.10.2013delete()
отправить его, иначе пусть об этом позаботится истечение срока действия сеанса. Также позволяет мне проверять форму между шагами. Решения JS для этого кажутся такими ненадежными (но если вы знаете хорошую библиотеку, я все равно посмотрю). Я основывал свой дизайн на реализации формы Django, которая довольно надежна. - person elithrar   schedule 21.10.2013