我是玩框架的新手,我正在尝试将我的应用分成多个较小的模块。例如,我想要一个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
标记中“包含”(并缩小)。首先,我是否朝着模块化的正确方向前进?其次,我怎样才能完成特定于模块的资产?
任何指针都会很棒。
答案 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)
}
}
我想你会使用PageService
和getAssets
作为抽象方法制作类似getBody
的特征。你的模块化方法似乎没问题。为了使页面具有任意数量的模块,我想我会将views.html.index
作为参数传递给sideBar
,而不是Map[String, PageService]
包含由字符串标识的各种模块(或符号,或任何其他你想要的东西)键,例如Map("header" -> HeaderService, "sidebar" -> SidebarService)
。这样,在视图中,您可以获取正在使用的模块的所有资源,并通过您定义的键查找以了解每个占位符中的内容。