1

スナップフレームワークとhaskellを使用して簡単なWebアプリケーションを作成しています。Webページにリストをレンダリングする方法を知りたいのですが、このように名前と名前のリストがあります。

[["firstName1","lastName1"],["firstName2","lastName2"],["firstName3","lastName3"]]

これらの情報を2つの列に表示したいのですが、これを行うための可能な方法は何ですか。単一の値の情報をバインドしてWebページに表示することができました。

4

2 に答える 2

6

Donのblaze-htmlの提案は、それを行う1つの方法ですが、そのようにすると、ビュー(この場合はHTML)をユーザーに埋め込むことで、一般的に使用されるMVCデザインパターンに違反する傾向が強くなることがわかります。 Haskellコード。場合によっては、すばやく汚いことをしようとしているだけなら、これがやるべきことかもしれません。しかし、ビューをコントローラーから分離し、デザイナーがHaskellに慣れていないデザイナーがそれを操作できるように、これをより大きなアプリケーションに適合させたい場合は、Heistテンプレートシステムを使用する方がよいでしょう。

ここにHeistチュートリアルがあります。私は最近、この種のことについての一連のブログ投稿も書きました。特にシリーズの2番目の投稿は、おそらくあなたの質問に最も関連性があります。これがあなたが望むようなことをするいくつかのコードです:

names :: [(Text,Text)]
names = [("Alice", "Anderson"), ("Bob", "Brown")]

nameSplice :: (Text, Text) -> Splice Application
nameSplice name =
    runChildrenWithText [("firstName", fst name), ("lastName", snd name)]

namesSplice :: Splice Application
namesSplice = mapSplices nameSplice names

アプリケーションのどこかで名前スプライスをバインドした後、次bindSplice "names" namesSpliceのようなテンプレートからこのデータを取得できます。

<table>
<names>
  <tr><td><firstName/></td><td><lastName/></td></tr>
</names>
</table>

これの良いところは、Webデザイナーが名前の表示方法を完全に制御できることです。順序付けされていないリストを「lastname、firstname」の形式で表示するように表示を変更する必要がある場合は、アプリケーションを再コンパイルしなくても、ここで非常に簡単に実行できます。

于 2011-04-27T05:24:12.397 に答える
4

構造化されたHaskellデータ型をhtmlにすばやく変換するための優れたコンビネータのセットとして、私はblaze-htmlを強く好みます。

それは次のように、たくさんの例がある素敵な家を持っています:

{-# LANGUAGE OverloadedStrings #-}

import Prelude hiding (head)
import Control.Monad
import Text.Blaze.Html4.Strict
import Text.Blaze.Renderer.Text
import qualified Data.Text.Lazy.IO as T

main = T.writeFile "f" (renderHtml (draw xs))
  where
    xs = [("firstName1","lastName1"),("firstName2","lastName2"),("firstName3","lastName3")]

draw xs = html $ do
    head $ title "Example"
    body $ do
        h1 "Heading"
        table $ forM_ xs $ \(f,l) ->
            tr $ do
                td f
                td f

textこのテーブルを含む文字列を生成します。

Heading

firstName1  firstName1
firstName2  firstName2
firstName3  firstName3

スナップから出力できればtextいいはずです。

于 2011-04-27T04:19:56.340 に答える