2013-01-06 36 views
9

Làm cách nào để thực hiện câu lệnh có điều kiện trong mẫu html trong GAE GO? Tôi đã cố gắng để thực hiện điều này để làm cho một tùy chọn được chọn trong một chọn thẻ html:Tuyên bố điều kiện trong gói mẫu GAE Go

<select name=".Grade"> 
      <option value=""></option> 
      <option value="1" {{ if .Grade="1" }} selected="selected" {{ end }}>Grade One</option> 
      <option value="2" {{ if .Grade="2" }} selected="selected" {{ end }}>Grade Two</option> 
      <option value="3" {{ if .Grade="3" }} selected="selected" {{ end }}>Grade Three</option> 
      <option value="4" {{ if .Grade="4" }} selected="selected" {{ end }}>Grade Four</option> 
      <option value="5" {{ if .Grade="5" }} selected="selected" {{ end }}>Grade Five</option> 
      <option value="6" {{ if .Grade="6" }} selected="selected" {{ end }}>Grade Six</option> 
</select> 

{{ if .Grade }} selected="selected" {{ end }} 

trong doc tham khảo nhưng điều này chỉ trả về true nếu .Grade có giá trị. Bất cứ sự giúp đỡ nào cũng được đánh giá cao. Cảm ơn!

Trả lời

15

Không có câu lệnh bình đẳng nào trong gói mẫu cơ sở.
Đây là số interesting discussion from golang-nuts về điều đó.

Bạn có một vài khả năng:

  • xác định một chức năng bên ngoài cho sự bình đẳng, giống như một Russ Cox cho thấy trong thread golang-hạt và thử nghiệm nó với một điều kiện if
  • sử dụng một cái gì đó mẫu cơ sở gói có thể hiểu (xem mã của tôi dưới đây)
  • xóa một số logic khỏi mẫu: thay vì có 6 trường được mã hóa cứng, bạn có thể tạo một kiểu dữ liệu với trường boolean selected và cung cấp một mảng gồm 6 đối tượng này cho một mẫu với range tuyên bố

tôi tái ví dụ của bạn bằng cách sử dụng một lát boolean:

func main() { 
    temp,err := template.ParseFiles("template.html") 
    if err != nil { 
     panic(err) 
    } 

    g := make([]bool, 7) 
    g[1] = true 
    temp.Execute(os.Stdout, &g) 
} 

Một dòng trong mẫu trông như thế này:

<option value="3"{{ if index . 3 }} selected="selected"{{ end }}>Grade Three</option> 

này không trông rất tốt với tôi. Nhưng tôi muốn nói rằng tất cả các giải pháp có nhược điểm của họ và rằng đây là một vấn đề của hương vị (giải pháp thứ ba nên được sạch hơn nhưng có thể được coi là overkill cho một điều đơn giản như vậy).

Chỉnh sửa (2013/12/11)

Trong Go 1.2 (released on 2013/12/01), các template engine đã được cập nhật và bao gồm các nhà khai thác mới, bao gồm so sánh. Điều này bây giờ sẽ hoạt động như mong đợi:

{{if eq .Grade 1 }} selected="selected" {{end}} 

Tuy nhiên, bạn vẫn có thể chọn giữ ít logic nhất có thể trong các mẫu của mình.

+1

Chuyển tới bản phát hành 1.2 – ithkuil

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