4

如果我们可以只template-engine保留scala.

使用模板引擎是:

  • 将模板语法转换为 Scala 代码的额外处理器时间
  • 然后编译这段代码(如果手动编写它就没有那么简洁了——然后它编译得更慢)
  • 此外,如果模板尚未转换为 scala,您可以从主代码中看到代码不一致(IDE 中的红色突出显示) - 所以您每次都应该考虑一下。

为什么不只使用scala这里提供的核心 xml/html 支持:http ://www.scala-lang.org/node/131

play-framework有没有可以单独使用或单独使用的纯 scala 模板(您可以推荐) ?

4

2 回答 2

3

实际上,您应该向开发团队提出这个问题,但请考虑以下几点:

  • 实际上,您根本不需要使用 Play 的模板引擎,您可以轻松地使用Ok()方法返回任何字符串,因此根据您的链接,您可以执行类似的操作Ok(theDate("John Doe").toString())
  • MVCPlay 使用其他网络框架非常典型的方法,其中视图是基于 HTML 的文件,因为......它是网络专用框架。我看不出这有什么问题,有时我正在使用其他语言/框架,并且可以看到它们之间的唯一区别只是特定于语言的语法,这就是目标!
  • 别忘了,Play 是双语系统,有人可能会问‘为什么不使用一些 Java 库来处理视图?'
  • 内置的 Scala XML 文字不适合创建复杂的程序,您很容易遇到问题(这也是为什么有一个名为anti-xml的库的原因);Martin Odersky 本人后悔将其作为语言功能
  • 最后,有支持 Play 2 视图的 IDE,我正在开发支持 Play2 的 Idea 12,虽然它并不完美(它很新,所以有时会出现小问题)在大多数情况下它工作正常。它理解 Play 视图的语法,提供自动完成功能,甚至您可以使用选项+单击视图中的某个对象直接跳转到方法/模型的声明等。

回答你的最后一个问题,AFAIK 官方提供了Groovy 引擎作为一个模块,它提供了 Play 1.x 中已知的模板引擎,但是,请记住,它只是人们从 Play 1.x 迁移到 Play 2.x 的桥梁因为它只是比Play 2 的原生引擎慢。

于 2013-06-29T07:11:42.800 回答
2

For me this fits as an answer, for last question at least.

This just scala. Just XML built-in magic.

http://www.alvarocarrasco.com/2011/03/play-framework-and-templating-with.html?m=1

Sample:

This is a template: Templates.scala file

package templates

import play.api.templates.Html
import scala.xml.Xhtml
import controllers.routes

object Main {

  def page (title:String="Default title")(content: => scala.xml.Elem) = Html {
    "<!DOCTYPE html>" +
      Xhtml.toXhtml(
        <html>
          <head>
            <title>{title}</title>
            <link rel="stylesheet" media="screen" href={routes.Assets.at("stylesheets/main.css").toString()} />
            <link rel="shortcut icon" type="image/png" href={routes.Assets.at("images/favicon.png").toString()} />
            <script src={routes.Assets.at("javascripts/jquery-1.9.0.min.js").toString()} type="text/javascript" />
          </head>
          <body>
            {content}
          </body>
        </html>
      )
  }

  // a panel template, just as an example
  def panel (label:String="Some label")(content: => scala.xml.Elem) = {
    <div class="panel">
      <div class="panel-label">{label}</div>
      <div>{content}</div>
    </div>
  }
}

This is an index page index.scala file

package views

import templates.Main._

object IndexPage {

  def apply() = {

    page(title="Welcome to my Page!") {

      <div>
        <h1>Hello</h1>

        <p>Some template markup</p>

        {
          panel(label="Dashboard panel")(
            <div>
              Panel content
            </div>
          )
        }

      </div>
    }
  }

}

This is a controller: Application.scala file

package controllers

import play.api.mvc._

object Application extends Controller {

  def index = Action {
    Ok(

      views.IndexPage()

    );
  }

}
于 2013-07-02T12:30:52.573 回答