将参数传递给Go模板中的javascript函数
我的Go模板中有以下内容将参数传递给Go模板中的javascript函数,javascript,go-templates,Javascript,Go Templates,我的Go模板中有以下内容 <button type="submit" class="validate_button" onclick="validate({{.Quiz.ID}})">Validate</button> 这当然非常有效: <button type="submit" class="validate_button" onclick="validate(1234)">Validate</button> 谢谢大家的回复。正如@mkopr
<button type="submit" class="validate_button" onclick="validate({{.Quiz.ID}})">Validate</button>
这当然非常有效:
<button type="submit" class="validate_button" onclick="validate(1234)">Validate</button>
谢谢大家的回复。正如@mkopriva所述,在。设置为迭代元素。我最初认为这个语法
{{range $o := $q.Options}}
因为我将迭代变量命名为o,所以可以避免这种情况,但我的假设是错误的
这就是本例中的问题。执行模板的输出是什么?什么都没有。应用程序已编译,但该按钮在页面中不可见。如果我检查页面,就没有按钮了。比如模板引擎放弃了,忘记了按钮。如果我直接硬编码一个像1234这样的值,它就会显示出来。执行模板的代码在哪里?如果执行模板没有输出,那么执行模板可能会出错。Execute方法返回的错误是什么?@MatiasBarrios正如您在这里看到的,您在问题中包含的一小块模板没有任何问题。问题要么出在您的Go代码中,要么出在您忽略的模板部分。当你就此提出问题时,你应该努力提供一个答案。
2020/02/13 09:52:49 template: execute.html:38:79: executing "execute.html" at <.Quiz.ID>: can't evaluate field Quiz in type models.Question
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Linux Quiz</title>
<meta name="description" content="Linux Quiz">
<meta name="author" content="Matias Barrios">
<link rel="stylesheet" href="static/executeQuizz/style.css">
<link rel="stylesheet" href="static/style.css">
<link rel="stylesheet" href="static/bootstrap/css/bootstrap.css">
<script src="static/bootstrap/js/bootstrap.min.js"></script>
<script src="static/executeQuizz/main.js"></script>
</head>
<body>
<div class="topnav">
<a class="active" href="/index">Home</a>
<a href="/logout" class="righty" ><div>Logout : <b>{{ .User.Name }}</b></div></a>
<a href="/contact" class="righty" >Contact</a>
<a href="/about" class="righty" >About</a>
</div>
<div class="title_and_description" >
<h5> {{ .Quiz.ID }} </h5>
<h6> {{ .Quiz.Description }} </h6>
</div>
{{range $q := .Quiz.Questions}}
<div class="question_container">
<p><h4>{{ $q.Question }}</h4></p>
{{ $mode := $q.Mode }} {{ if eq $mode "single" }}
{{range $o := $q.Options}}
<input type="radio" id="{{ $q.ID }}" name="{{ $q.ID }}" value="{{$o}}">
<label for="{{ $q.ID }}">{{$o}}</label><br>
{{end}}
{{ end}}
</div>
<div class="validate_quiz">
<button type="submit" class="validate_button" onclick="validate({{.Quiz.ID}})">Validate</button>
</div>
{{ end }}
</body>
</html>
func executeQuizzHanlder(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/execute" && r.Method != "GET" {
errorHandler(w, r, http.StatusNotFound)
return
}
claims := getClaims(w, r)
u := models.User{
Name: claims.Username,
}
keys, ok := r.URL.Query()["quizz"]
if !ok || len(keys) < 1 || len(keys[0]) < 1 {
errorHandler(w, r, http.StatusNotFound)
return
}
quizz, err := quizzes.GetQuizzByID(keys[0])
if err != nil {
errorHandler(w, r, http.StatusNotFound)
return
}
quizz.ID = keys[0]
envelope := models.ExecuteQuizzEnvelope{
User: u,
Quiz: quizz,
}
err = views.ViewExecuteQuizz.Execute(w, &envelope)
log.Println(err.Error())
}
package models
// Question :
type Question struct {
ID string `json:"id"`
Mode string `json:"mode"`
Question string `json:"question"`
Options []string `json:"options"`
Answers []string `json:"answers"`
}
// Quiz :
type Quiz struct {
ID string `json:"id"`
Description string `json:"description"`
Author string `json:"author"`
Questions []Question `json:"questions"`
Completed bool `json:"-"`
}
// ExecuteQuizzEnvelope :
type ExecuteQuizzEnvelope struct {
User User
Quiz Quiz
}
{{range $o := $q.Options}}