首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何避免在play2中到处传递参数?

如何避免在play2中到处传递参数?
EN

Stack Overflow用户
提问于 2012-03-09 13:14:46
回答 3查看 41.5K关注 0票数 125

在play1中,我通常在操作中获取所有数据,直接在视图中使用它们。因为我们不需要在视图中显式声明参数,所以这非常简单。

但是在play2中,我发现我们必须在视图的头部声明所有的参数(包括request),在操作中获取所有数据并将它们传递到视图中将非常乏味。

例如,如果我需要在首页显示从数据库加载的菜单,我必须在main.scala.html中定义它

@(title: String, menus: Seq[Menu])(content: Html)    

<html><head><title>@title</title></head>
<body>
    <div>
    @for(menu<-menus) {
       <a href="#">@menu.name</a>
    }
    </div>
    @content
</body></html>

然后我必须在每个子页面中声明它:

@(menus: Seq[Menu])

@main("SubPage", menus) {
   ...
}

然后,我必须获取菜单,并在每个操作中将其传递给视图:

def index = Action {
   val menus = Menu.findAll()
   Ok(views.html.index(menus))
}

def index2 = Action {
   val menus = Menu.findAll()
   Ok(views.html.index2(menus))
}

def index3 = Action {
   val menus = Menu.findAll()
   Ok(views.html.index(menus3))
}

现在它在main.scala.html中只有一个参数,如果有多个呢?

所以最后,我决定把所有的Menu.findAll()都直接放在视图中:

@(title: String)(content: Html)    

<html><head><title>@title</title></head>
<body>
    <div>
    @for(menu<-Menu.findAll()) {
       <a href="#">@menu.name</a>
    }
    </div>
    @content
</body></html>

我不知道它是好的还是推荐的,有没有更好的解决方案?

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

https://stackoverflow.com/questions/9629250

复制
相关文章

相似问题

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