Fay代码中的持久模型类型

时间:2013-03-29 17:34:44

标签: haskell yesod fay

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

  • 将数据构造函数Example a添加到SharedTypes.Command
  • case readFromFay Command of ...的{​​{1}}表达式中,添加一个与我的新数据构造函数匹配的大小写。
  • 在/ fay中创建一个Fay文件'Example.hs',在fay / Home.hs之后创建。在此处的某处,使用表达式Handler.Fay.onCommand
  • 为将使用我正在生成的Javascript的页面定义路由和处理程序。在处理程序中,使用call (Example "foo") $ myFayCallback

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

在Fay文件中使用$(fayFile' (ConE 'ScriptR) "Example.hs")不起作用 - 当我尝试加载使用此Fay文件的页面时,我在浏览器中出错(Fay的标准方式提醒我错误,我猜测)表示它找不到模块'Model',但它只搜索了以下目录:

  • projectroot /小集团-dev的//份额/仙女-0.14.2.0 / SRC
  • projectroot /小集团-dev的/共享/仙女碱基0.14.2.0 / SRC
  • projectroot /小集团-dev的/共享/仙女碱基0.14.2.0
  • projectroot /仙女
  • projectroot /仙女共享

我也尝试在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关联起来。

1 个答案:

答案 0 :(得分:3)

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