首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果我们可以使用纯scala的话,为什么在运行框架2 (scala)中使用模板引擎?

如果我们可以使用纯scala的话,为什么在运行框架2 (scala)中使用模板引擎?
EN

Stack Overflow用户
提问于 2013-06-29 01:23:04
回答 2查看 3.6K关注 0票数 4

如果我们可能只使用template-engine,那么为什么在第2版( scala )中使用scala?

使用模板引擎是:

  • 将模板语法转换为scala代码的附加处理器时间
  • 然后编译这段代码(如果手工编写的话,代码就不那么简洁了--然后编译得更慢)。
  • 另外,如果模板尚未转换为scala,则可以从主代码中看到代码的不一致性(IDE中的红色高亮显示)--因此您每次都应该考虑它。

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

我是否可以在play-framework或单独使用任何纯scala模板(您可以推荐)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-02 12:30:52

对我来说,这是一个答案,至少是最后一个问题。

这就是斯卡拉。只是内置了XML的魔法。

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

示例:

这是一个模板:Templates.scala文件

代码语言:javascript
复制
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>
  }
}

这是一个索引页 index.scala文件

代码语言:javascript
复制
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>
    }
  }

}

这是一个控制器: Application.scala文件

代码语言:javascript
复制
package controllers

import play.api.mvc._

object Application extends Controller {

  def index = Action {
    Ok(

      views.IndexPage()

    );
  }

}
票数 2
EN

Stack Overflow用户

发布于 2013-06-29 07:11:42

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

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

在回答您的最后一个问题时,AFAIK正式将提供Groovy引擎作为一个模块,它提供了从Play 1.x已知的模板引擎,但是请记住,它只是为从Play 1.x迁移到Play 2.x的人提供了一座桥梁,因为它比Play 2的本地引擎要慢。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17375776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档