1

据我所知,如果我想在控制器中创建一个动作,那么我可以通过以下方式完成:

class My Controller {
    def myAction = {
      println "in my action "
    }
}

或者我可以通过以下方式创建它:

class My Controller {
    def myAction(){
      println "in my action "
    }
}

有人可以告诉我这两种方法之间的区别,或者我的概念或看法有什么问题吗?

4

3 回答 3

2

第一个实现是在控制器中定义公共闭包,第二个是使用公共方法。

第二种方式是在 grails 2 中引入的,被广泛认为是最好的方式。

我能想到的几个原因:

  • 尤其是在最新版本的 grails 中,使用方法可以让您利用 Traits。
  • 您可以使用继承来组织您的方法
  • 它必须更有效率

更新: 为什么要将 grails 操作声明为方法而不是闭包,它有什么区别?

于 2013-03-25T08:43:56.940 回答
0

我不确定,但我认为它曾经是第一种方式是唯一的方式,然后它改变为允许第二种方式。我认为第二种方式是首选方式,但我不确定。

[编辑]

这是另一个堆栈溢出帖子,进一步解释了它:

为什么要将 grails 操作声明为方法而不是闭包,它有什么区别?

于 2013-03-24T18:48:27.760 回答
0

利用方法而不是动作(闭包属性)有一些优点:

  1. 内存效率
  2. 允许使用无状态控制器(单例范围)
  3. 您可以覆盖子类中的操作并使用 super.actionName() 调用被覆盖的超类方法
  4. 方法可以被标准代理机制拦截,这对于闭包来说很复杂,因为它们是字段。

请访问以下链接了解更多信息。

Grails 控制器

于 2015-12-30T06:55:55.860 回答