私は Yesod scaffolded サイト (yesod 1.1.9.2) を使用しており、昨日数時間かけて、Yesod での Fay の基本的な使い方について頭を悩ませました。これで、Fay を使用して AJAX 機能のチャンクをページに追加するための意図したワークフローを理解できたと思います (他の誰かがステップバイステップが役立つと思うかもしれないという理由だけで、ここでは少し衒学的になります)。
Example a
にデータ コンストラクターを追加しますSharedTypes.Command
。- の式
case readFromFay Command of ...
でHandler.Fay.onCommand
、新しいデータ コンストラクターに一致するケースを追加します。 - fay/Home.hs をパターンにした Fay ファイル 'Example.hs' を /fay に作成します。ここのどこかで、式を使用します
call (Example "foo") $ myFayCallback
。 - 生成している Javascript を使用するページのルートとハンドラーを定義します。ハンドラーで、 を使用します
$(fayFile' (ConE 'ScriptR) "Example.hs")
。
私の質問:現在の Yesod/Fay アーキテクチャでは、Persistent モデル タイプを 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
- プロジェクトルート/フェイ
- projectroot/fay-shared
また、SharedTypes.hs でモデルをインポートおよび再エクスポートしようとしましたが、同じエラーが発生しました。
これを行う方法はありますか?そうでない場合、なぜですか?(私は Haskell と Yesod の両方に比較的慣れていないので、「なぜ?」という質問への回答は非常に役に立ちます。)
編集:
この質問のタイトルで Persistent に言及すると誤解を招く可能性があることに気付きました。私がやろうとしていることをより明確にするために: 私のモデルのために Yesod が定義するのと同じデータ型を使用して、Fay コードでデータを表現できるようにしたいだけです。たとえば、このように config/models でモデルを定義すると...
Foo
bar BarId
textThatCanBeNull Text Maybe
deriving Show
... タイプの値を受け取ったり返したりする AJAX 'コマンド' を定義しFoo
、Fay コードをFoo
s で処理できるようにしたいと考えています。私の Fay コードから Persistent のクエリ機能を直接使用することはできないことを理解しています。私は Model.hs と config/models のすべてを Persistent と頭の中で関連付けているので、タイトルで Persistent についてのみ言及しました。