我正在使用Yesod脚手架网站(yesod 1.1.9.2),昨天花了几个小时围绕着使用Yesod的Fay的基本用法。我想我现在明白了使用Fay为页面添加一大块AJAX功能的预期工作流程(我在这里会有点迂腐,因为其他人可能会发现一步一步的帮助):
Example a
添加到SharedTypes.Command
。case readFromFay Command of ...
的{{1}}表达式中,添加一个与我的新数据构造函数匹配的大小写。Handler.Fay.onCommand
。call (Example "foo") $ myFayCallback
。我的问题:在目前的Yesod / Fay架构中,我应该如何与我的Fay代码共享我的Persistent模型?
在Fay文件中使用$(fayFile' (ConE 'ScriptR) "Example.hs")
不起作用 - 当我尝试加载使用此Fay文件的页面时,我在浏览器中出错(Fay的标准方式提醒我错误,我猜测)表示它找不到模块'Model',但它只搜索了以下目录:
我也尝试在SharedTypes.hs中导入和重新导出Model,但这会产生同样的错误。
有办法做到这一点吗?如果没有,为什么不呢? (我是Haskell和Yesod的相对noob,所以“为什么不?”这个问题的答案真的很有帮助。)
修改
我刚才意识到在这个问题的标题中提到持久性可能会产生误导。为了更清楚我正在尝试做什么:我只是希望能够使用Yesod为我的模型定义的相同数据类型在我的Fay代码中表示数据。例如。如果我在config / models中定义一个模型......
import Model
...我希望能够定义一个AJAX'命令',它接收和/或返回Foo
bar BarId
textThatCanBeNull Text Maybe
deriving Show
类型的值,并让我的Fay代码处理Foo
s而不必我写任何de /序列化代码。我知道我将无法直接从我的Fay代码中使用任何Persistent的查询功能;我只提到标题中的Persistent,因为我在心理上将Model.hs和config / models中的所有内容与Persistent关联起来。
答案 0 :(得分:3)
目前不支持此功能;由Fay不支持的Persistent利用了许多功能(例如,模板Haskell)。目前,拥有一个由Fay和Yesod共享的中间数据类型并将您的Persistent数据转换为该类型的数据可能是有意义的。