【发布时间】:2013-03-29 17:34:43
【问题描述】:
我正在使用 Yesod 脚手架站点(yesod 1.1.9.2),昨天花了几个小时来了解 Fay 和 Yesod 的基本用法。我想我现在了解了使用 Fay 向页面添加大量 AJAX 功能的预期工作流程(在这里我会有点迂腐,因为其他人可能会觉得逐步进行有帮助):
- 将数据构造函数
Example a添加到SharedTypes.Command。 - 在
Handler.Fay.onCommand中的表达式case readFromFay Command of ...中,添加与我的新数据构造函数匹配的大小写。 - 在 /fay 中创建一个 Fay 文件“Example.hs”,以 fay/Home.hs 为模板。在这里的某个地方,使用表达式
call (Example "foo") $ myFayCallback。 - 为将使用我生成的 Javascript 的页面定义路由和处理程序。在处理程序中,使用
$(fayFile' (ConE 'ScriptR) "Example.hs")。
我的问题:在当前的 Yesod/Fay 架构中,我应该如何与我的 Fay 代码共享我的 Persistent 模型类型?
在 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
- projectroot/fay
- projectroot/fay-shared
我也尝试在 SharedTypes.hs 中导入和重新导出模型,但产生了同样的错误。
有没有办法做到这一点?如果不是,为什么不呢? (我是 Haskell 和 Yesod 的相对菜鸟,所以回答“为什么不呢?”这个问题真的很有帮助。)
编辑:
我刚刚意识到在这个问题的标题中提到 Persistent 可能会产生误导。为了更清楚我想要做什么:我只想能够使用 Yesod 为我的模型定义的相同数据类型在我的 Fay 代码中表示数据。例如。如果我因此在 config/models 中定义模型...
Foo
bar BarId
textThatCanBeNull Text Maybe
deriving Show
...我希望能够定义一个接收和/或返回Foo 类型值的 AJAX“命令”,并让我的 Fay 代码在 Foos 中处理,而无需我编写任何 de/序列化代码。我知道我将无法直接从我的 Fay 代码中使用 Persistent 的任何查询功能;我只在标题中提到了 Persistent,因为我将 Model.hs 和 config/models 中的所有内容都与 Persistent 联系在一起。
【问题讨论】: