2013-06-11 15 views
5

コンパイルされたヒューリス概念を理解できないようです。ネット上に例はありません。単純なコードスニペットを解釈からコンパイルに変更するにはどうすればいいですか?例えば翻訳からヒストリコンパイルへ

listUsersH :: AppHandler() 
listUsersH = do 
    users <- liftIO $ getColList "users" 
    let userListS = mapSplices userLinkS users 
    heistLocal (bindSplice "users" userListS) $ render "list-users" 
    where 
    userLinkS d = runChildrenWithText [("user",T.pack $ at "uname" d)] 

がどのように私は "runChildren"、 "mapSplices" の単純な組み合わせ、 "bindSplice" を行うと、コンパイル済みの強盗で "レンダリング" でしょうか?

私はコンセプトが異なり、 "heistLocal"がないことを理解しています。しかし、私は今戻って、 "for each"ループに一連のレコードを表示するなどの基本的なことをやり直す必要があります方法。誰かがこれを明確にし、上記のような簡単な例を示してもらえますか?

現時点では、コンパイルされたheistで単純な変数置換を行う方法はわかりません。例えば は、この:

simpleString = "Insert me..." 
insertString = heistLocal (bindSplices spl) $ render "tst" 
where 
    spl = [("var", textSplice simpleString)] 

してください、誰かが基本で私を助けたり、いくつかの最低限の例と場所に私を指します。私はスナップウェブサイトのドキュメントを読んだ。

答えて

1

コンパイルされたスプライスは、使用するのがはるかに困難です。 1つは、すべてのスプライスを静的に前面に拘束する必要があります。これには、考え方にかなり大きなシフトが必要です。以前は、heistLocalを使ってスプライスを必要なときに束縛できる範囲が限定されたものとして見ることができました。リクエスト内の情報を使用してハンドラで決定を行い、それに応じてスプライスをバインドすることができます。コンパイルされたスプライスでも同様のことができますが、制御を逆にする必要があります。今度はスプライス(ハンドラモナドの周囲のモナドトランスフォーマーなので、ハンドラ関数にはまだアクセスできます)の中で、そのようなリクエストベースの意思決定を行う必要があります。

Webデザイナーがグローバルなリソースとしてコンパイルしたスプライスを考えて、どのページでも使用できるようにすることをお勧めします。このようにスプライスを表示することには、いくつかの利点があります。第1に、heistLocalに結合された特殊なスプライスよりも直交性が高く、構成可能です。次に、スプ​​ライスがバインドされているかどうかを心配する必要がないため、デバッグが容易になります。

しかし、スプライスをコンパイルするのが最も難しいのは、ロード時間とランタイムの分割とスプライス機能の意味です。私たちはwikiページの最後のセクションでこれについて少し話します。migrating to Heist 0.10について。これの背後にはa longer discussion of the "why"もあります。

コンパイル済みのHeistのAPIの改善にも取り組んでいます。私たちはHeist 0.13を完成させることにとても近く、APIを大幅に簡素化し、物事をより理解しやすくするために役立ちます。現在githubのnew-apiブランチにあるコードは、リリース準備ができています。

+0

OK。ですから、今のところ解釈された亜種にこだわることをお勧めしますか?少なくとも、APIを整理して安定させるまで。私はまだ正直言って、コンセプトの周りに頭を浮かべることはできません...それはまだクリックされていません。だから、私は最初にmakeSnaplet関数ですべてのスプライスをバインドして処理しますか? –

+0

一度にすべてを行う必要はありませんが、すべてのコンパイル済みスプライスを追加するにはaddConfig関数を使用する必要があります。あなたが切り替えるかどうかは、どのように出血したいかによって決まります。私は新しいAPIの分岐がはるかに変化することは予見しない。私のtodoリストに残っているのは、1つまたは2つ以上の機能を追加することだけです。そこにあるものはすべてかなり安定しているはずです。私は0.13をリリースするまでこの質問に具体的なコードの回答を与えるつもりはありませんが、あなたがIRCで私を打つと、私は正しい方向にあなたを指すことができます。 – mightybyte

+0

ありがとう、mightybyte、0.13のリリース後にいくつかの例を待つことにします。少なくとも最も一般的なパターン。それはネット上に何もないので、有用なsoooooだろう。私は今まで解釈された変種に固執します。 –