将参数传递给Go模板中的javascript函数

问题描述 投票:0回答:1

我的Go模板中包含以下内容。

<button type="submit" class="validate_button" onclick="validate({{.Quiz.ID}})">Validate</button>

这不起作用,并且出现此Javascript错误:

"Property assignment expected."

这当然很完美:

<button type="submit" class="validate_button" onclick="validate(1234)">Validate</button>

这里正确的语法是什么?

注意 :

我正在使用VS Code。同样是告诉我有错误,但我可以编译就可以了。问题是,一旦我运行该应用程序,页面上就没有“按钮”。它只是消失了。当我对值进行硬编码时,它可以正常工作。

注2:

这是执行我的模板的输出:

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
}

我的Go模板中包含以下内容。

javascript go-templates
1个回答
0
投票

感谢大家的答复。如@mkopriva所述,在range

© www.soinside.com 2019 - 2024. All rights reserved.