Play Framework Modules:模块特定资产

时间:2013-03-04 15:48:22

标签: scala playframework playframework-2.0

我是玩框架的新手,我正在尝试将我的应用分成多个较小的模块。例如,我想要一个header模块和一个sidebar模块。

现在,我已经创建了这些模块和一个page模块,它将每个模块呈现在正确的位置。

以下是模块代码的示例:

package controllers

import play.api.templates._

object SidebarService {

  def getHTML() : Html = {
    views.html.sidebar(name = "variable", repeat = 5)
  }
}

请注意,它返回Html个对象。

以下是page模块

的示例
package controllers

import play.api._
import play.api.mvc._

object Application extends Controller {

  def index = Action {
    var sideBar = SidebarService.getHTML()
    Ok(views.html.index(sideBar)("Your new application is ready."))
  }

}

这很好用,但我对如何将特定于模块的资产包含在page模块中有点困惑,例如sidebar模块具有特定的css和javascript文件,这些文件将在<head>模块的page标记中“包含”(并缩小)。首先,我是否朝着模块化的正确方向前进?其次,我怎样才能完成特定于模块的资产?

任何指针都会很棒。

1 个答案:

答案 0 :(得分:1)

关于包含特定于模块的资产,我想你总是可以这样做:

package controllers

import play.api.templates._

object SidebarService {

  def getAssets : Html = {
    // your <link> and <script> tags here
  }

  def getBody : Html = {
    views.html.sidebar(name = "variable", repeat = 5)
  }
}

我想你会使用PageServicegetAssets作为抽象方法制作类似getBody的特征。你的模块化方法似乎没问题。为了使页面具有任意数量的模块,我想我会将views.html.index作为参数传递给sideBar,而不是Map[String, PageService]包含由字符串标识的各种模块(或符号,或任何其他你想要的东西)键,例如Map("header" -> HeaderService, "sidebar" -> SidebarService)。这样,在视图中,您可以获取正在使用的模块的所有资源,并通过您定义的键查找以了解每个占位符中的内容。