[英]Is it posible to return javascript function from golang struct?
下面的示例是一个 golang 结构
type Column struct {
Data string `json:"data"`
Title string `json:"title"`
Type string `json:"type"`
Class string `json:"class"`
Visible bool `json:"visible"`
Render template.JS `json:"render"`
}
func (c *Column) SetValue() {
// code below is flexible depend on condition but here i keep it simple.
c.Render = template.JS(`function(data, type, row) { if(type === 'display'){ return $.fn.dataTable.render.text().display(data);} return data;}`);
}
这是golang模板中的Javascript
<script>
$(function () {
console.log({{.Columns}}, wantedobj);
});
</script>
这是chrome开发人员工具。
在渲染上是否有任何可能的方法来获取 javascript function 而不是字符串? (请看右图的渲染)
使用template.JS
是正确的。 您的问题是,在 HTML 模板中,值会根据上下文进行转义:
在解析时,每个 {{.}} 都会被覆盖以根据需要添加 escaping 函数。
在<script>
标记内,结构值(例如{{.Columns}}
呈现为 JSON。 现在,由于template.JS
只是string
上的定义类型,因此当您将Columns
编组为 JSON 时,字段Render
将保留其字符串表示形式。
如果直接打印Render
,它会显示为未加引号的 Javascript:
console.log({{.Columns.Render}}); // unescaped JS function
现在您可能会考虑在Columns
上实现MarshalJSON
以将Render
为未转义的 Javascript,但这不再是有效的 JSON。 Function 不是 JSON 数据类型。 它只能是一个字符串。 一个选项是使用text/template
package 代替,但它不会再转义任何东西。 或者使用单个字段构造 Javascript object:
<script>
$(function () {
const foo = {
data: {{.Columns.Data}},
render: {{.Columns.Render}}
}
console.log(foo);
});
</script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.