コンパイルされたスプライスを構築し、URL 変数に依存するデータをそれらにフィードする必要がある状況があります。私は問題を解決するのに苦労しています。
そのため、テーブルにレンダリングする必要がある単純なファイル名リストがあります。単純。ファイルはグループまたはカテゴリに属しているため、すべてのファイルまたは特定のカテゴリに関連するファイルを一覧表示できます。この関数を使用してデータをプルします。
getFilesList :: Maybe ByteString -> AppHandler [Document]
getFilesList cat = do
let selection = maybe [] (\c -> ["category" =: T.decodeUtf8 c]) cat
r <- eitherWithDB $ rest =<< find (select selection "files") {project = ["blob" =: 0]}
return $ either (const []) id r
Nothing を取得した場合はリスト全体を取得し、Just カテゴリを取得した場合はそのカテゴリに属するファイルを取得します。ここまで簡単。
上記の関数をハンドラー内から呼び出して、引数を渡すことができるようにします。
listFiles :: AppHandler [Document]
listFiles = do
cat <- getParam "cat"
let r = maybe Nothing (\c -> if c == "all" then Nothing else Just c) cat
render "files/list-files"
getFilesList r
URL で「all」または Nothing を取得すると、完全なリストが取得されます。それ以外 - カテゴリでフィルタリングされたリストを取得します。
URLルートは次のようになります
("/files/:cat", method GET listFiles)
しかし、「メソッド」関数は Handler App App () 署名のみを受け入れるため、問題が発生しました。私のハンドラーは、スプライスに供給されるデータを返します。
私はスプライスを次のように構築します。
listFilesS :: Splices (Splice (Handler App App))
listFilesS = "files" ## files
where
files = manyWithSplices runChildren file $ lift listFiles -- Feed data here
file = do
"file-name" ## (pureSplice . textSplice $ at "name")
"file-oid" ## (pureSplice . textSplice $ id)
"file-date" ## (pureSplice . textSplice $ dateFromDoc)
"file-size" ## (pureSplice . textSplice $ fsize)
"file-type" ## (pureSplice . textSplice $ at "type")
"file-auth" ## (pureSplice . textSplice $ const "admin")
"file-link" ## (pureSplice . textSplice $ flink)
"file-category" ## (pureSplice . textSplice $ at "category")
where id = T.pack . show . valueAt "_id"
fsize = T.pack . show . round . (flip (/) 1024) . (at "size")
flink = T.append "/files/" . id
私はそれを回避する方法を見つけることができません。おそらく、何か愚かなものを見逃しているだけです。私が間違っていることはありますか?
いずれにせよ、最初にテンプレートをレンダリングしてからデータをプルするため、ハンドラー関数は正しくないように見えます。ハンドラーを修正すると、URL パラメーターに基づいてデータをフィードできなくなります。
混乱している。