2013-05-24 41 views
36

Tôi có struct này:Tiếp cận trên value vòng lặp bên golang mẫu của vòng lặp

type Site struct { 
    Name string 
    Pages []int 
} 

tôi vượt qua một thể hiện của Site đến một template.

Nếu tôi muốn viết một danh sách tất cả các trang, tôi

{{range .Pages}} 
    <li><a href="{{.}}">{{.}}</a></li> 
{{end}} 

Bây giờ, cách đơn giản nhất để sử dụng trường Name bên trong vòng lặp là những gì (ví dụ để thay đổi href-Name/page)?

Lưu ý rằng một giải pháp dựa trên thực tế là đối tượng bên ngoài là một đối tượng toàn cầu được chuyển đến mẫu sẽ là OK.

Trả lời

52

Bạn nên biết rằng biến được chuyển đến mẫu có sẵn là $.

{{range .Pages}} 
    <li><a href="{{.}}">{{$.Name}}</a></li> 
{{end}} 

(Xem tài liệu text/template dưới "Biến".)

+1

"$", làm cách nào tôi bỏ lỡ điều đó trong chuyến lưu diễn ... +1 và cảm ơn! – eduncan911

+0

Điều gì sẽ xảy ra nếu tôi có biến toàn cầu 123 và bên trong một phạm vi, tôi đang cố gắng sử dụng id của phạm vi làm biến toàn cầu? Vì vậy, khó hiểu ... nhưng làm thế nào tôi có thể làm điều này? Tôi đã thử những điều sau đây nhưng nó không hoàn toàn hoạt động ... http://pastebin.com/iAUtiLMq – Acidic

6

Dường như không có giải pháp đơn giản hơn để tuyên bố một cách rõ ràng một biến cho các đối tượng bên ngoài (hoặc thuộc tính của nó):

{{$out := .}} 
{{range .Pages}} 
    <li><a href="{{$out.Name}}/{{.}}">{{.}}</a></li> 
{{end}} 

EDIT: câu trả lời này không phải là một trong những quyền nữa, nhìn thay vào đó là của chowey.

+1

Không có gì vô lý về vấn đề này cả. Tôi đã làm điều này trước đây. Nó làm những gì nó nói. Rõ ràng> ngắn gọn. – JimPaek

+0

@JimPaek Không có lối tắt nào cho đối tượng được chuyển đến mẫu? –

+0

Tôi xin lỗi, tôi nghĩ rằng tôi đã sai. Bạn có thể làm điều gì đó như: phạm vi $ index, $ page: = .Pages và sau đó tôi tin "." vẫn là đường dẫn ban đầu của mẫu. Chỉnh sửa: để được kiểm tra – JimPaek

7

gì về:

{{$name := .Name}} 
{{range $page := .Pages}} 
    <li><a href="{{$name}}/{{$page}}">{{$page}}</a></li> 
{{end}} 

Hoặc đơn giản là làm cho Pages một bản đồ với tên chính thức giá trị?

type Site struct { 
    Pages map[string]string 
} 


{{range $page, $name := .Pages}} 
    <li><a href="{{$name}}/{{$page}}">{{$page}}</a></li> 
{{end}} 
+0

Giải pháp đầu tiên là giống như của tôi. Điều thứ hai không phù hợp: tên không phải là tên của trang nhưng của trang web. –

Các vấn đề liên quan