2013-03-04 71 views
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文件,这些文件将被page模块的<head>标签“包含”(并缩小)。首先,我正朝着模块化的正确方向前进吗?其次,我如何完成特定于模块的资产?

任何指针都会很棒。

回答

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性状与getAssetsgetBody为抽象方法。你的模块化方法似乎没问题。为了让页面拥有任意数量的模块,我想我会作为参数传递给views.html.index不仅sideBar,但可能是Map[String, PageService]包含由字符串(或符号或任何其他你想要的东西)标识的各种模块,例如Map("header" -> HeaderService, "sidebar" -> SidebarService)。这样一来,在视图中,您可以获取所使用模块的所有资产,并通过您定义的键查找每个占位符中绘制的内容。