播放模板仅在带括号调用时有效

屋大维

我的Application控制器中有以下代码

  def index = Action {
    var ticketsAvailable = 1
    Ok(views.html.index)
  }

当我尝试运行该应用程序时,出现以下编译错误:

Cannot write an instance of views.html.index.type to HTTP response. Try to define a Writeable[views.html.index.type]

在线上

Ok(views.html.index) 

但是,当我添加括号(如下所示)时,错误消失了:

Ok(views.html.index()) 

这是为什么?我认为在Scala中,没有参数时括号的使用是可选的。

迈克斯名

查看生成的Scala代码以获取一个简单的Twirl模板(Twirl是Play模板引擎),该模板称为index.scala.html

@()

<h1>Hello, world</h1>

默认情况下,Play会将其编译为中的Scala文件target/scala-2.11/twirl/main/views/html/index.template.scala,并且,如果您稍稍清理一下以删除源映射(可以将模板中的编译错误转换为输入文件中的右行),它将看起来像这:

package views.html
import play.twirl.api._

object index_Scope0 {
  import models._
  import controllers._
  import play.api.i18n._
  import views.html._
  import play.api.templates.PlayMagic._
  import play.api.mvc._
  import play.api.data._

  class index
    extends BaseScalaTemplate[play.twirl.api.HtmlFormat.Appendable, Format[play.twirl.api.HtmlFormat.Appendable]](play.twirl.api.HtmlFormat)
    with play.twirl.api.Template0[play.twirl.api.HtmlFormat.Appendable] {

    def apply(): play.twirl.api.HtmlFormat.Appendable = {
      _display_ {
        {
          Seq[Any](format.raw(""""""), format.raw("""<h1>hello, world</h1>"""))
        }
      }
    }

    def render(): play.twirl.api.HtmlFormat.Appendable = apply()
    def f: (() => play.twirl.api.HtmlFormat.Appendable) = () => apply()
    def ref: this.type = this
  }
}

object index extends index_Scope0.index

要注意的重要一点是,这views.html.index是一个对象,它的类型为views.html.index.type,这就是您不添加括号时要引用对象但是,此对象扩展了一个名为的类views.html.index_Scope0.index该类具有一个apply()方法,该方法返回一个Html对象(或更确切地说,HtmlFormat.Appendable是非别名类型)。

如果您“调用”一个Scala对象,Scala会将其转换(或“去糖”),以调用apply()该对象上的方法(这是案例类构造函数不使用new。的工作方式。)因此,如果使用parens,则会得到一个Html对象是渲染的Twirl模板的结果。如果不这样做,您只会得到已编译的模板对象本身,而Play并不知道如何写入HTTP响应。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

图像RotateFlip仅在直接调用时有效

来自分类Dev

图像RotateFlip仅在直接调用时有效

来自分类Dev

JavaScript在使用Node调用时有效,但仅在从HTML调用时才有效

来自分类Dev

PHP函数中的javaScript代码仅在首次调用时有效

来自分类Dev

QLocale setDefault 仅在第二次调用时有效

来自分类Dev

灰烬加载模板仅在页面刷新时有效

来自分类Dev

jQuery Ajax调用仅在首页加载时有效

来自分类Dev

Sails.js / Waterline .add()和.remove()仅在第二次调用时有效

来自分类Dev

使用jquery序列化上传多个文件仅在第二次调用时有效

来自分类Dev

使用openCV从网络摄像头捕获图像的功能仅在首次调用时有效

来自分类Dev

拖放:仅在刷新时有效

来自分类Dev

提取仅在刷新时有效

来自分类Dev

仅在调试javascript时有效

来自分类Dev

angularJS表单验证仅在首次使用时有效

来自分类Dev

Javascript:JSON请求仅在第一次使用时有效

来自分类Dev

jQuery验证-errorPlacement仅在第一次使用时有效

来自分类Dev

Javascript:JSON请求仅在第一次使用时有效

来自分类Dev

按钮仅在一个接一个使用时有效

来自分类Dev

自动播放视频的canvas.drawimage仅在可见视频元素时有效

来自分类Dev

将数组绑定到模板中的组件仅在页面加载时有效

来自分类Dev

异步函数在一次但不是多次调用时有效

来自分类Dev

$.ajax 在立即调用时有效,但在单击时作为回调调用时无效

来自分类Dev

使用Ajax调用追加div仅在首次加载时有效

来自分类Dev

从视图观察控制器属性仅在从didInsertElement调用get('controller')时有效

来自分类Dev

Spring @Transactional仅在调用方也是@Transactional时有效

来自分类Dev

Spring @Transactional仅在调用方也是@Transactional时有效

来自分类Dev

在 INotifyPropertyChanged 上调用 IValueConverter 仅在开始时有效

来自分类Dev

在 INotifyPropertyChanged 上调用 IValueConverter 仅在开始时有效

来自分类Dev

我的剑道级联下拉列表失败了。仅在第一次使用时有效

Related 相关文章

  1. 1

    图像RotateFlip仅在直接调用时有效

  2. 2

    图像RotateFlip仅在直接调用时有效

  3. 3

    JavaScript在使用Node调用时有效,但仅在从HTML调用时才有效

  4. 4

    PHP函数中的javaScript代码仅在首次调用时有效

  5. 5

    QLocale setDefault 仅在第二次调用时有效

  6. 6

    灰烬加载模板仅在页面刷新时有效

  7. 7

    jQuery Ajax调用仅在首页加载时有效

  8. 8

    Sails.js / Waterline .add()和.remove()仅在第二次调用时有效

  9. 9

    使用jquery序列化上传多个文件仅在第二次调用时有效

  10. 10

    使用openCV从网络摄像头捕获图像的功能仅在首次调用时有效

  11. 11

    拖放:仅在刷新时有效

  12. 12

    提取仅在刷新时有效

  13. 13

    仅在调试javascript时有效

  14. 14

    angularJS表单验证仅在首次使用时有效

  15. 15

    Javascript:JSON请求仅在第一次使用时有效

  16. 16

    jQuery验证-errorPlacement仅在第一次使用时有效

  17. 17

    Javascript:JSON请求仅在第一次使用时有效

  18. 18

    按钮仅在一个接一个使用时有效

  19. 19

    自动播放视频的canvas.drawimage仅在可见视频元素时有效

  20. 20

    将数组绑定到模板中的组件仅在页面加载时有效

  21. 21

    异步函数在一次但不是多次调用时有效

  22. 22

    $.ajax 在立即调用时有效,但在单击时作为回调调用时无效

  23. 23

    使用Ajax调用追加div仅在首次加载时有效

  24. 24

    从视图观察控制器属性仅在从didInsertElement调用get('controller')时有效

  25. 25

    Spring @Transactional仅在调用方也是@Transactional时有效

  26. 26

    Spring @Transactional仅在调用方也是@Transactional时有效

  27. 27

    在 INotifyPropertyChanged 上调用 IValueConverter 仅在开始时有效

  28. 28

    在 INotifyPropertyChanged 上调用 IValueConverter 仅在开始时有效

  29. 29

    我的剑道级联下拉列表失败了。仅在第一次使用时有效

热门标签

归档