gpt4 book ai didi

checkbox - 在 golang 中检查复选框的惯用方式

转载 作者:IT王子 更新时间:2023-10-29 01:46:10 24 4
gpt4 key购买 nike

在您投反对票之前,这个问题并不像标题听起来那么可笑。

假设我有项目和类别。一个项目可以属于多个类别。

我有一个基本的 HTML 表单,用户可以在其中填写内容以创建项目,我还将所有类别列为复选框列表(请参见下面的代码),以便用户可以检查项目的类别(一个或多个)正在创建的应该属于。

目前一切顺利。

但是,当用户编辑这个项目时,我当然想显示类别复选框列表,其中项目所属的类别填充为选中状态,以便您可以轻松查看该项目当前属于哪些类别,并取消选中如果你喜欢等

听起来很简单。

因此,我们将在 Controller 中进行类似以下查询的操作(例如,我想编辑 id = 3 的项目)

1) SELECT * FROM Item WHERE Id = 3  (gets us the item we want to edit)
2) SELECT * FROM Categories WHERE 1 (gets ALL categories)
3) SELECT CategoryId FROM ItemCategories WHERE ItemId = 3 (gets the categoryids for the categories the item belongs to)

显示类别(所有类别)的 HTML 看起来像这样

<form>
...
{{range .Categories}}
<input name="cat" type="checkbox" value="{{ .Id }}" /> {{ .Title}} <br />
{{end}}
...
</form>

因此,我通常想要做的只是能够针对范围内的每个类别检查 ItemCategories 结果中是否存在 Id,如果存在则将其设置为在 HTML 代码中检查。由于很难为此使用 FuncMap,因为它不允许您将带有选中类别的 slice 传递给方法,因此要了解如何在表示层中完成此操作变得有点挑战,给定您拥有所需的数据。

当然,我可以在 Controller 中以多种方式执行此操作(从将第二个和第三个查询中的两个结果合并为一个结构,到在那里构建 HTML 输出,再通过上下文将其传递到 HTML 页面)但是因为我仍在学习如何使用 golang 编写代码,所以我只是想看看其他人是如何解决这种情况的,因为它在本质上非常普遍(也就是说,我肯定会再次遇到它)。

谢谢。

最佳答案

事实证明,funcmap 函数可以采用两个参数,因此我们实际上可以将类别与项目类别之间的比较放在“ View ”中,即 HTML 中。唯一的技巧是避免范围内的“点”上下文问题。

所以,解决方案看起来像这样:

{{ $ic := .ItemCategories }}  //this is needed since range changes the context
{{range .Categories}}
<input name="cat" type="checkbox" value="{{ .Id }}" {{ CategorySelected .Id $ic}}/> {{ .Title}} <br />
{{end}}

请注意,将 id 与一片 id 进行比较的 CategorySelected 需要在 FuncMap 定义中列出才能工作(至少它没有它对我来说是行不通的)。

关于checkbox - 在 golang 中检查复选框的惯用方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26185307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com