在你点踩之前,请注意,这个问题并不像标题听起来那么荒谬。
假设我有物品和类别。一个物品可以属于多个类别。
我有一个基本的HTML表单,用户填写信息以创建一个项目。我还将所有类别列为复选框列表(请参见下面的代码),以便用户可以勾选创建的项目应属于哪个类别(一个或多个)。
到目前为止一切都很好。
然而,当用户编辑此项目时,我当然希望显示类别复选框列表,并将该项目所属的类别作为选中状态显示出来,以便您可以轻松地查看该项目当前属于哪些类别,并进行取消选择等操作。
听起来很容易。
因此,在控制器中我们会有以下查询(假设我想编辑id = 3的项目)。
展示所有类别的HTML代码如下:
因此,我通常希望能够针对范围内的每个类别,检查ItemCategories结果中是否存在Id,并在HTML代码中将其设置为checked。由于这很难使用FuncMap完成,因为它不允许您将已选类别的切片传递给该方法,因此在呈现层中如何完成此操作变得有些具有挑战性,尽管您具有所需的数据。
假设我有物品和类别。一个物品可以属于多个类别。
我有一个基本的HTML表单,用户填写信息以创建一个项目。我还将所有类别列为复选框列表(请参见下面的代码),以便用户可以勾选创建的项目应属于哪个类别(一个或多个)。
到目前为止一切都很好。
然而,当用户编辑此项目时,我当然希望显示类别复选框列表,并将该项目所属的类别作为选中状态显示出来,以便您可以轻松地查看该项目当前属于哪些类别,并进行取消选择等操作。
听起来很容易。
因此,在控制器中我们会有以下查询(假设我想编辑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代码如下:
显示类别(所有类别)的HTML代码如下:
<form>
...
{{range .Categories}}
<input name="cat" type="checkbox" value="{{ .Id }}" /> {{ .Title}} <br />
{{end}}
...
</form>
因此,我通常希望能够针对范围内的每个类别,检查ItemCategories结果中是否存在Id,并在HTML代码中将其设置为checked。由于这很难使用FuncMap完成,因为它不允许您将已选类别的切片传递给该方法,因此在呈现层中如何完成此操作变得有些具有挑战性,尽管您具有所需的数据。
当然,我可以在控制器中以多种方式完成此操作(从将第二个和第三个查询结果合并为结构体,到在那里构建HTML输出,通过上下文将其传递到HTML页面),但由于我仍在学习如何在golang中编码,所以我想检查其他人是如何解决这种类型的情况的,因为它在本质上是相当通用的(即,我肯定会再次遇到它)。
谢谢。