如何在scala框架中增加灵活性



我把这个贴在play framework google group上,但是他们因为某种原因把它删除了。也许有很好的理由,虽然我发现很难从一个动态的web框架到一个静态的像Play。

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

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

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

并传递UserDataRequest类型的对象,但这仍然不是那么灵活

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

对于如何克服这个问题,玩游戏的人有什么建议吗?有人做最后一个案例吗?

在我的公司,我们必须非常灵活,能够为赞助内容等添加特别的黑客,这是很难捕捉到的,所以有时我们必须触发一个页面元素基于一个单一项目的id。我不想每次都这样重构。

我想你可以使用以上的混合方式,例如

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

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

我猜您对文档及其工作方式没有清楚的了解。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)

通过这个看起来没有办法做到这一点,你必须传递一切到主视图在控制器从我可以看到。从我对它们的理解来看,隐式对我的场景也不起作用。如果有人可以打扰说,请纠正我,因为我想知道一个更好的方法。解耦到此为止

最新更新