【问题标题】:Can an action call more than one render一个动作可以调用多个渲染吗
【发布时间】:2016-04-29 17:23:42
【问题描述】:

我可以让一个动作多次调用渲染方法吗?

def someAction() {
  render f.field()
  render f.field()
}

我们正在尝试将字段插件中的两个字段渲染到 ajax 响应以更新 div。以这种方式使用渲染有什么问题吗?

【问题讨论】:

    标签: grails grails-2.0 grails-controller


    【解决方案1】:

    是的,你可以。

    class ExampleController {
      def action1() {
        render text: 'text1'
        render text: 'text2'
        action2()
      }
    
      def action2() {
        render text: 'text3'
      }
    }
    

    您可以在响应关闭之前调用渲染。

    class ExampleController {
      def action1() {
        render text: 'text1'
        return // finishing response
        action2()
      }
    
      def action2() {
        render text: 'will not be rendered'
      }
    }
    

    附:我从来没有这样做过。在动作结束时调用一次渲染比在不同的地方多次调用更好更清晰。

    【讨论】:

    • 我认为这是技术上正确的答案,尽管我仍然找不到任何支持它的文档。对我来说,渲染只是将结果输出转储到响应中,因此可以多次调用,这对我来说非常有意义,但我们的团队选择使用 JSON 方法以更好地适应文档化的方法。
    【解决方案2】:

    这不是正确的方法,如果要更新多个元素,可以通过json渲染字段,如下所示:

    render ([fieldOne : f.field(), fieldTwo : f.field()] as JSON)
    

    然后在 JavaScript 响应中,您可以处理这两个字段并同时更新它们。 P/D:您必须导入 grails 转换器才能使用“as JSON”语句

    import grails.converters.JSON
    

    【讨论】:

    【解决方案3】:

    简短的回答是否定的。但是,您可以使用 withFormat 让您的控制器以不同的格式呈现:

    withFormat {
                html bookList:books
                js { render "alert('hello')" }
                xml { render books as XML }
                json { render books as JSON}
            } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 2016-09-14
      • 2020-08-28
      • 2023-03-05
      • 2010-10-01
      • 1970-01-01
      • 2018-08-19
      相关资源
      最近更新 更多