さて、これは私が克服するのに苦労しているコンパイルされたスプライスのもう 1 つの障害です。元の解釈されたスプライスで最初にそれを行ったときにいくつかの問題があり、今ではそれをコンパイルされたバリアントに変換するのに行き詰まっています.
元の問題はここで説明されています:テーブルのレンダリング
したがって、この種の構造を構築する必要があります。
map (\doc -> fmap (\f -> splice $ f at doc) fields ) documents
これは、外部ループと内部ループ、外側のレンダリング raw と内側のレンダリング セルだけです。それはすべて元のリンクで説明されています。
現在、次のように解釈モードで実装されています。
tableRawS raw = mapSplices (\f -> tableCellS $ T.pack $ at f raw) (tableFields table)
where tableCellS cell = runChildrenWithText $ "table-cell" ## cell
tableBodyS = mapSplices (\d -> runChildrenWith $ raws d) documents
where docID d = T.pack $ show $ valueAt "_id" d
raws d = do "table-raw" ## tableRawS d
"raw-id" ## textSplice $ docID d
私は数日間苦労してきましたが、結果はありません。これはおそらく、コンパイルされた splices API を理解していないことが原因です。助けてください!
編集
問題の詳細を十分に提供していません。上記の解釈されたバリアントの最良の近似値は、次のとおりです。
tableBody = manyWithSplices runChildren tableRaw $ lift documents
tableRaw doc = do "table-raw" ## manyWithSplices runChildren rawCell $ lift labels
where rawCell label = "table-cell" ## pureSplice . textSplice $ at label doc
"table-rawid" ## pureSplice . textSplice $ at "_id" doc
where oid = T.pack . show. valueAt "_id"
それは動作しません!問題は、tableRaw である raw レンダリング関数を変換することです。というわけで詳しく紹介します。tableBody に入力しているデータは、マップのような構造のリストとして提供されます。
document = ["_id" =: 12345, "name" =: "pretty", "model" =: "cool", "size" =: "big"]
データを生で引き出すには、ラベルのリストをマップする必要があります
map (\l -> at l document) labels
解釈されたバリアンで問題なくこれを行うことができます。tableRawS の解釈された例はドキュメントによってパラメータ化されていますが、[ラベル] にマップされています。コンパイルされたバリアントではこれを達成できません。ドキュメントと tableRaw 関数に存在するラベルのリストの両方が必要なので、ドキュメントからさまざまなセル スプライスをバインドできます。これは本当の痛みです。やり方がわかりません。私が何をしても、ラベルのリストをマッピングするのではなく、ドキュメントを tableRaw マッピングすることになります。
基本的。上記の文書構造を持つデータベースから [文書] を取得し、データベースからラベルを取得します。
labels = ["name", "model", "size"] -- table fields
「at :: Label -> Value」を使用してドキュメントからデータを取得します。これで、このテンプレートをレンダリングするにはどうすればよいですか。
<table class="table" data-title=${table-name}>
<thead>
<tr>
<th>#</th>
<table-head>
<th> <table-hcell/> </th>
</table-head>
</tr>
</thead>
<tbody>
<table-body>
<tr data-oid=${table-rowid}>
<td> <input type="checkbox"/> </td>
<table-raw>
<td> <table-rcell/> </td>
</table-raw>
</tr>
</table-body>
</tbody>