3

我正在使用 Yesod 脚手架站点(yesod 1.1.9.2),昨天花了几个小时来了解 Fay 和 Yesod 的基本用法。我想我现在了解了使用 Fay 向页面添加大量 AJAX 功能的预期工作流程(我在这里会有点迂腐,因为其他人可能会发现逐步的帮助):

  • 将数据构造函数添加Example aSharedTypes.Command.
  • 在 中的表达式case readFromFay Command of ...Handler.Fay.onCommand,添加一个与我的新数据构造函数匹配的案例。
  • 在 /fay 中创建一个 Fay 文件“Example.hs”,以 fay/Home.hs 为模板。在这里的某个地方,使用表达式call (Example "foo") $ myFayCallback
  • 为将使用我正在生成的 Javascript 的页面定义一个路由和处理程序。在处理程序中,使用$(fayFile' (ConE 'ScriptR) "Example.hs").

我的问题:在当前的 Yesod/Fay 架构中,我应该如何与我的 Fay 代码共享我的持久模型类型?

在 Fay 文件中使用import Model不起作用 - 当我尝试加载使用此 Fay 文件的页面时,我在浏览器中收到错误(我猜是 Fay 提醒我错误的标准方式),表明它不能找到模块“模型”,但它只搜索了以下目录:

  • projectroot/cabal-dev//share/fay-0.14.2.0/src
  • projectroot/cabal-dev/share/fay-base-0.14.2.0/src
  • projectroot/cabal-dev/share/fay-base-0.14.2.0
  • 项目根/fay
  • projectroot/fay-shared

我还尝试在 SharedTypes.hs 中导入和重新导出模型,但这产生了相同的错误。

有没有办法做到这一点?如果不是,为什么不呢?(我是 Haskell 和 Yesod 的相对菜鸟,所以回答“为什么不呢?”这个问题真的很有帮助。)

编辑:

我刚刚意识到在这个问题的标题中提到 Persistent 可能会产生误导。为了更清楚我想要做什么:我只想能够使用 Yesod 为我的模型定义的相同数据类型在我的 Fay 代码中表示数据。例如,如果我在 config/models 中定义了一个模型......

Foo
    bar BarId
    textThatCanBeNull Text Maybe
    deriving Show

...我希望能够定义一个接收和/或返回类型值的 AJAX“命令”,Foo并让我的 Fay 代码在Foos 中处理,而无需编写任何反序列化代码。我知道我将无法直接从我的 Fay 代码中使用 Persistent 的任何查询功能;我只在标题中提到了 Persistent,因为我将 Model.hs 和 config/models 中的所有内容都与 Persistent 联系在一起。

4

1 回答 1

3

目前不支持此功能;Persistent 利用了许多 Fay 不支持的功能(例如,模板 Haskell)。现在,拥有一个由 Fay 和 Yesod 共享的中间数据类型并将您的 Persistent 数据转换为/从该类型转换可能是有意义的。

于 2013-03-31T06:33:11.617 回答