【问题标题】:How to increase flexibility in scala play frameworkd如何增加scala play框架的灵活性
【发布时间】:2014-08-13 20:23:45
【问题描述】:

我在 play framework google group 上发布了这个,但他们出于某种原因删除了它。也许有充分的理由,尽管我发现很难从动态 Web 框架转到像 Play 这样的静态框架。

问题在于我习惯于在控制器中设置随机变量,并在视图中某处的显示元素中检测到它们并处理它。在游戏中,您必须预先定义将传递给视图元素的所有内容,然后从该视图中您需要继续将元素传递给下一个视图元素,直到最终到达需要的位置。

我意识到你可以做包装 WrappedReqest 的复合对象,例如

case class UserDataRequest[A](val user: User, val cart: Cart,
request: Request[A]) extends WrappedRequest(request) 

并传递 UserDataRequest 类型的对象,但这仍然不够灵活。

你可以传递一个 [String,Any] 类型的映射,但这感觉像是作弊,你必须将键值转换为适当的类型,这还不错。

有没有使用 play 的人对如何克服这个问题有任何建议?有人做最后一个案例吗?

在我的公司中,我们必须非常灵活,并且能够为赞助内容等添加临时黑客,这很难预先捕获,因此有时我们必须根据单个项目的 id 触发页面元素。我不想每次都重构来做到这一点。

我猜你可以使用上述的混合体,例如

case class MyRequest[A](val user: User, val item: Item, data: Map[String,Any]
request: Request[A]) extends WrappedRequest(request) 

但是您仍然需要将数据对象从一个函数调用一路向下传递到下一个函数调用,直到它到达目标。在上面我希望数据映射在模板中神奇地可用。

【问题讨论】:

    标签: playframework


    【解决方案1】:

    我猜您对文档及其工作方式没有清晰的认识。事实上 Play 是静态类型的,这并不意味着它对所有人都是静态的,而是它试图在 Web 上变得更加类型安全(这是一个很大的优势)。

    你应该阅读:

    1. https://www.playframework.com/documentation/2.3.x/ScalaActions
    2. https://www.playframework.com/documentation/2.3.x/ScalaForms
    3. https://www.playframework.com/documentation/2.3.x/ScalaSessionFlash
    4. https://www.playframework.com/documentation/2.3.x/ScalaActionsComposition(例如Play: How to implement action composition

    【讨论】:

    • 我已经阅读了它们和 scala 的剧本。我所看到的只是您将一个或几个对象传递给该视图中使用的视图的示例,但我对您可能需要一个对象或设置不需要的标志的情况感兴趣第一个视图,甚至可能是该视图的子视图,但也可能是子视图的子视图。我如何将该标志、对象等传递给那些子视图,而无需繁琐的参数传递和更改中间视图。以上哪个链接解决了这个问题?我也不认为隐式参数可以解决它。
    • 如果你读过文档,你应该看到播放模板:playframework.com/documentation/2.3.x/ScalaTemplates
    【解决方案2】:

    从表面上看,没有办法做到这一点,您必须从我所看到的将所有内容传递给控制器​​中的主视图。从我对它们的理解来看,对于我的场景,隐含不会为此工作。 如果有人会打扰说否则请纠正我,因为我很想知道更好的方法。 解耦就这么多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-11
      • 2016-08-17
      • 1970-01-01
      • 2020-01-06
      • 1970-01-01
      • 2011-08-03
      • 2012-02-20
      • 2013-05-27
      相关资源
      最近更新 更多