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。首先,我是否朝着模块化的正确方向前进?其次,我怎样才能完成特定于模块的资产?

任何指针都会很棒。

4

1 回答 1

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)
  }
}

我想你会用抽象方法和抽象方法来制作类似PageService特征的东西。您的模块化方法似乎还可以。为了使页面具有任意数量的模块,我想我不仅将作为参数传递给,而且可能将 a包含由字符串(或符号或任何其他您想要的东西)键标识的各种模块,例如. 这样,在视图中,您可以获取您正在使用的模块的所有资产,并通过您定义的键进行查找,以了解在每个占位符中绘制什么。getAssetsgetBodyviews.html.indexsideBarMap[String, PageService]Map("header" -> HeaderService, "sidebar" -> SidebarService)

于 2013-03-05T10:00:27.097 回答