2014-10-03 3 views
2

downvote를 치기 전에, 제목에서 들릴지 모르겠지만 질문은 우스꽝스러운 것이 아닙니다.골란에서 체크 박스를 체크하는 관용적 인 방법

내가 아이템과 카테고리를 가지고 있다고 말하십시오. 항목은 여러 범주에 속할 수 있습니다.

사용자가 항목을 작성하는 데 필요한 정보를 채우고 모든 카테고리를 체크 박스 목록 (아래 코드 참조)으로 나열하여 사용자가 어떤 카테고리 (하나 또는 여러 항목)를 확인할 수 있도록하는 기본 HTML 양식이 있습니다. 생성되는 항목이에 속해야합니다.

지금까지 모든 것이 잘되었습니다.

그러나 사용자가이 항목을 편집 할 때 해당 항목이 현재 속한 범주를 쉽게 볼 수 있도록 항목이 속한 카테고리가있는 체크 박스 목록을 체크 표시로 표시하고 싶습니다. 선택을 취소하십시오.

쉬운 소리.

그래서 우리는

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 (모든 범주)이 보일 것이다 무언가 (예를 들어, 나는 = 3 ID로 항목을 편집 할) 컨트롤러에서 다음 쿼리 같은 것을 할 것이다 그래서이

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

처럼, 내가 일반적으로 수행하고 싶은 것하는 것은 단지 ItemCategories이 결과에 아이디가있는 경우 확인 등으로 설정하면, 범위 카테고리 당 할 수있을 것입니다 HTML 코드를 체크인합니다. 이것을 위해 FuncMap을 사용하는 것은 어렵 기 때문에 체크 된 카테고리가있는 슬라이스를 메서드에 전달할 수 없기 때문에 프레젠테이션 레이어에서이 작업을 수행하는 방법을 알면 약간의 어려움이 있습니다 필요한 데이터를 보유하고 있는지 확인하십시오.

물론 컨트롤러에서 여러 가지 방법으로이 작업을 수행 할 수 있습니다 (두 번째 및 세 번째 쿼리의 두 결과를 구조체로 병합 한 후 HTML 출력을 빌드하고 HTML 페이지로 전달) 그러나 나는 아직도 golang을 코딩하는 법을 배우기 때문에 다른 사람들이 이런 유형의 상황을 어떻게 해결할 것인지를 확인하기를 원합니다.

감사합니다.

답변

1

원한다면 질문을 삭제할 수 있습니다. 그러나 여기에 내가 한 일이 있습니다. 어쩌면 다른 사람이 같은 종류의 문제에 부딪히는 것을 도울 수 있습니다.

funcmap 함수는 두 개의 매개 변수를 취할 수 있기 때문에 카테고리와 항목의 범주를 "보기"즉 HTML에서 비교할 수 있습니다. 유일한 트릭은 범위 내에서 "점"문맥 문제를 피하는 것입니다.

그래서, 솔루션과 같이 보일 것이다 : ID의 조각에 ID를 비교 CategorySelected이, (일을하기 위해 FuncMap 정의에 나열 할 필요가

{{ $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}} 

참고 적어도 그 그것 없이는 나를 위해 일하지 않았다).

관련 문제