在GSP中将数据从控制器传递到JavaScript

Mea*_*eam 5 javascript grails json

我希望直接在视图中通过嵌入数据将数据从控制器传递到javascript.(因此不会有额外的请求.)

我的第一个解决方案是as JSON在GSP中使用这样的:

<script>
  var data = ${invoice as JSON};
</script>
Run Code Online (Sandbox Code Playgroud)

我不认为这是个好主意,因为我必须使用(Grails 2.2)

grails.views.default.codec = "none"
Run Code Online (Sandbox Code Playgroud)

或(Grails 2.3)

grails {
  views {
    gsp {
      codecs {
        expression = 'none'
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,我发现我可以像这样创建一个小的taglib:

def json = { attrs, body ->
  out << (attrs.model as JSON)
}
Run Code Online (Sandbox Code Playgroud)

我可以在GSP中使用以下代码:

<script>
  var data = <g:json model="${invoice}" />;
</script>
Run Code Online (Sandbox Code Playgroud)

现在,问题.使用taglib是最佳做法吗?如果没有,请给我最好的解决方案.

小智 3

转换答案中的评论。您可以在控制器中创建 JSON 字符串并将其传递到视图。Grails 2.3.x 具有不会对您的内容进行编码的原始编解码器。有关此编解码器的更多信息请参见此处

例子:

class MyController {
  def index() {
    String invoiceString = invoice as JSON
    [json: invoiceString]
  }
}
Run Code Online (Sandbox Code Playgroud)

索引.gsp

<script>
  var data = ${raw(json)};
</script>
Run Code Online (Sandbox Code Playgroud)