目前,我遇到了一个与将Golang变量分配给Javascript变量相关的问题。我正在使用Golang模板,因此,我从后端发送了一个JSON变量,就像这样:
var c []models.C
b, _ := json.Marshal(c)
err = tpl.ExecuteTemplate(w, "index.gohtml",string(b))
如您所见,我有一个切片,将其转换为Json,然后将Json转换为string,并将其发送到模板。然后,在前端我需要把它赋给一个变量,它应该是有效的JSON,我有这个:
var rowData = {{.}};
但是,我得到的是语法错误:预期的属性名,得到的是“{”
所以,我的问题是:我应该如何分配JSON?
您可以编写自定义模板函数,将结构封送到json中。这样,您就不必自己在处理程序中封送所有结构。特别是当您需要HTML模板和JS脚本中的结构时。
使用杜松子酒的示例。
主要是。go文件。
router := gin.New()
router.SetFuncMap(template.FuncMap{
"json": func(s interface{}) string {
jsonBytes, err := json.Marshal(s)
if err != nil {
return ""
}
return string(jsonBytes)
},
})
在处理程序函数中。
type MyStruct struct {
Foo string `json:"foo"`
}
func Handler(ctx *gin.Context) {
myStruct := MyStruct{
Foo: "test",
}
ctx.HTML(http.StatusOK, "template-file.go.html", gin.H{
"MyStruct": myStruct,
})
}
最后,在您的template.go.html文件中添加一个脚本标记并在此处定义您的全局变量。稍后您可以在JS文件中访问它们。
<script type="text/javascript">
// NB on JSON.parse and json functions!
let event = JSON.parse({{ json .MyStruct }});
</script>
// Below you can import your JS file as usual.
<script type="text/javascript" src="/assets/js/index.js"></script>
首先,您必须使用 html/template
而不是文本/模板
,因为前者提供上下文相关的转义。
其次,在模板中,上下文必须明确它是JavaScript代码,例如它必须在超文本标记语言中
请参阅此工作示例:
type Point struct {
Name string
X, Y int
}
func main() {
t := template.Must(template.New("").Parse(src))
p := Point{"Center", 100, 200}
pj, err := json.Marshal(p)
if err != nil {
panic(err)
}
if err = t.Execute(os.Stdout, string(pj)); err != nil {
panic(err)
}
}
const src = `<script>
var point = {{.}};
alert(point);
</script>`
输出(在Go Playground上尝试):
<script>
var point = "{\"Name\":\"Center\",\"X\":100,\"Y\":200}";
alert(point);
</script>
如您所见,JavaScript
变量包含
有效的 JSON 文本(JavaScript 对象),已正确转义。
问题内容: 假设我有一个功能 现在,我想将函数分配给一个名为的变量,这样,如果我使用,它将再次调用该函数。如果我只是做作业,它就会返回。 问题答案: 您根本不调用该函数。 括号告诉蟒蛇,你调用的函数,所以当你把它们放在那里,它调用的功能,并指定值 返回 的(在这种情况下)。
问题内容: 我正在使用以下代码: 该值不警报。怎么了 问题答案: 实质上:
您好,我正在开发一个swing聊天应用程序,其中聊天历史记录存储在一个xml文件中。在NetBeans项目中完成后,我能够获取xml文件并将其显示在表中 但是当转换成jar文件时,我无法使用xml文件。我尝试过各种方法,比如getClass()。getResource()方法,但它检索URL而不是字符串,如果使用toString()方法将其转换为字符串,则无法将其用作解析xml文件的有效路径。 下
我是helm的新手,我希望能够使用配置映射和共享环境变量将gitlab项目变量写入文件。 我为每个环境(其中
问题内容: 在上面,这是硬代码。我想将 变量 分配 给值。即,均值=注册; 让我知道! 问题答案: 您的问题不是很清楚。我假设变量是在Servlet中声明的,因为在JSP中使用Java是一种不好的做法。为了能够在转发到JSP的Servlet之间共享变量,您需要将此变量设置为request属性: 然后在JSP中,您可以使用JSP EL获得“ registration”属性的值: 您应该阅读Java
问题内容: 我一直在使用IIFE中和,并一直在使用的结构如下: 方法1: 但是,我经常看到以下情况,其中将变量分配给 方法2: 注意: 此问题 不是 关于此模式是什么或IIFE是什么。这与为什么要 在IIFE上 使用返回变量及其与Angular实践的关系有关。 在Angular方法1中工作正常,但是在我看到的许多原始JS示例中,都使用了方法2。我的假设是,封装在其中的任何内容都可以通过它进行调用。