問題タブ [heist]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
658 参照

haskell - Snap: コンパイルされたスプライス コードの例

少し前に同様の質問をしたと思いますが、APIが不安定なため回答がありませんでした。だから私は0.13が通り過ぎるのを待っていました。同様の質問をするのが正しいかどうかわかりません...?

runChildrenWith(Text)解釈さmapSplicesれ、コンパイルされたスプライスの世界に代わるものは何ですか? (この組み合わせが最も一般的なようです) 可能であれば、いくつかのコード例をいただければ幸いです。

私の理解が正しければ、すべてのアプリケーション スプライスをまとめて、heistInit. 誰でもそれを行う方法を教えてもらえますか?

スプライス バインディング タグは、アプリケーション全体で一意である必要がありますか?

utilising私が読んで学ぶことができるように、完成したスナッププロジェクトの新しい API とコンパイルされたスプライスはありますか?

ありがとうございました。

- アップデート -

以下の素晴らしい答え。しかし、残念ながら、一部のパーツ (レンズが付いているパーツ) はさらに混乱しました。私が正しく理解していれば、これは文字列を接合する簡単な方法です:

スプライスされた文字列を数回実行する必要がある場合、たとえば 5 つのテーブル raw で次のようにします。

これは正しいです?

ヘイスト構成にスプライスを追加しようとすると、大量のエラーが発生します。

どこが間違っていますか?遅くなってごめんなさい。

私が本当に必要とするのは(今のところ理解できるように)、データベースから受け取った単純な文字列をつなぎ合わせて表示することだけです。

-- 更新 2 --

非常に役立つダニエルの回答のおかげで、私は最終的に何かを機能させることができます。

これまでのところ、コードの両方のバリアントが機能しています。

ダニエルのおかげで最初のもの

そしてセカンド

どこ

と同様の結果を生成します

上記に違いはありますか?どちらかを優先するケースはありますか?それらは同じ結果を生み出すようです。

ドキュメントによると、コンパイルされた splices lib には「deferMany」関数があり、解釈された lib の mapSplices と同様の結果を生成します。「C.manyWithSplices C.runChildren」の組み合わせの代わりに使用できますか??

0 投票する
1 に答える
151 参照

haskell-snap-framework - Snap: コンパイルされたスプライスによるデータベース アクセス

コンパイルされたスプライスについて頭を悩ませようとしています。以前の助けを借りて、いくつかの有用な結果をコンパイルしてレンダリングできます。私はそれがどのように機能するかを完全には理解していません。

インタープリター モードでは、アルゴリズムは単純です。ルートを構築し、マップされた URL を指定してハンドラー関数を呼び出し、DB からデータをプルし、プルされたデータからスプライスを構築してバインドし、それらを heist に挿入して、適切なテンプレートを呼び出します。

コンパイルモードではすべて逆さまです。URL を直接 cRender にマップし、ハンドラーを呼び出しません。したがって、すべてのスプライス構築関数とデータ処理関数はロード時に呼び出されると想定しています。

私の質問は、データベースが呼び出されるのはいつですか? これはロード時にも発生しますか?私が理解できないのは一連の出来事です。

スプライスの構築は特定のテンプレート レンダリングに依存しないため、スプライス バインディング タグはアプリケーション全体で一意であるということですか?? それらはグローバル変数のようなものですか?

ありがとう

0 投票する
1 に答える
178 参照

haskell - Snap: 実行時の決定と URL 変数に応じてコンパイルされたスプライス

コンパイルされたスプライスを構築し、URL 変数に依存するデータをそれらにフィードする必要がある状況があります。私は問題を解決するのに苦労しています。

そのため、テーブルにレンダリングする必要がある単純なファイル名リストがあります。単純。ファイルはグループまたはカテゴリに属しているため、すべてのファイルまたは特定のカテゴリに関連するファイルを一覧表示できます。この関数を使用してデータをプルします。

Nothing を取得した場合はリスト全体を取得し、Just カテゴリを取得した場合はそのカテゴリに属する​​ファイルを取得します。ここまで簡単。

上記の関数をハンドラー内から呼び出して、引数を渡すことができるようにします。

URL で「all」または Nothing を取得すると、完全なリストが取得されます。それ以外 - カテゴリでフィルタリングされたリストを取得します。

URLルートは次のようになります

しかし、「メソッド」関数は Handler App App () 署名のみを受け入れるため、問題が発生しました。私のハンドラーは、スプライスに供給されるデータを返します。

私はスプライスを次のように構築します。

私はそれを回避する方法を見つけることができません。おそらく、何か愚かなものを見逃しているだけです。私が間違っていることはありますか?

いずれにせよ、最初にテンプレートをレンダリングしてからデータをプルするため、ハンドラー関数は正しくないように見えます。ハンドラーを修正すると、URL パラメーターに基づいてデータをフィードできなくなります。

混乱している。

0 投票する
1 に答える
276 参照

haskell - Snap: コンパイルされたスプライスを含むレンダリング テーブル

さて、これは私が克服するのに苦労しているコンパイルされたスプライスのもう 1 つの障害です。元の解釈されたスプライスで最初にそれを行ったときにいくつかの問題があり、今ではそれをコンパイルされたバリアントに変換するのに行き詰まっています.

元の問題はここで説明されています:テーブルのレンダリング

したがって、この種の構造を構築する必要があります。

これは、外部ループと内部ループ、外側のレンダリング raw と内側のレンダリング セルだけです。それはすべて元のリンクで説明されています。

現在、次のように解釈モードで実装されています。

私は数日間苦労してきましたが、結果はありません。これはおそらく、コンパイルされた splices API を理解していないことが原因です。助けてください!

編集

問題の詳細を十分に提供していません。上記の解釈されたバリアントの最良の近似値は、次のとおりです。

それは動作しません!問題は、tableRaw である raw レンダリング関数を変換することです。というわけで詳しく紹介します。tableBody に入力しているデータは、マップのような構造のリストとして提供されます。

データを生で引き出すには、ラベルのリストをマップする必要があります

解釈されたバリアンで問題なくこれを行うことができます。tableRawS の解釈された例はドキュメントによってパラメータ化されていますが、[ラベル] にマップされています。コンパイルされたバリアントではこれを達成できません。ドキュメントと tableRaw 関数に存在するラベルのリストの両方が必要なので、ドキュメントからさまざまなセル スプライスをバインドできます。これは本当の痛みです。やり方がわかりません。私が何をしても、ラベルのリストをマッピングするのではなく、ドキュメントを tableRaw マッピングすることになります。

基本的。上記の文書構造を持つデータベースから [文書] を取得し、データベースからラベルを取得します。

「at :: Label -> Value」を使用してドキュメントからデータを取得します。これで、このテンプレートをレンダリングするにはどうすればよいですか。

0 投票する
1 に答える
323 参照

postgresql - Heist テンプレートで postgresql-simple の結果を使用する

このHeist チュートリアルとこのpostgresql-simple チュートリアルを組み合わせようとしています。

私はこれのさまざまなバリエーションを試してみました。

しかし、私はこのエラーを受け取り続けました。

そのインスタンス宣言を実装する方法がわからず、モナドをまだ完全に把握していません。正しい軌道に乗っているかどうかさえわかりません。

編集: @mightybyte の回答に感謝し、これを思いつきました。

0 投票する
2 に答える
344 参照

haskell - Snap-Heist: テンプレートがレンダリングされないのはなぜですか?

Snap と Heist を使用してテンプレートをレンダリングしようとしています。

ハンドラー関数が正しく呼び出されていると確信しています (ハンドラー関数の内容を に置き換えるとundefined、期待どおりに失敗します。Debug.Trace.traceまた、期待どおりに動作します)。

このハンドラー関数は、次の 1 行で構成されますrender "template"。しかし、何らかの理由No handler accepted <url>で、またはそのようなものの代わりにエラーが発生template not foundしています。

ここでの問題は、テンプレートを間違ったディレクトリに配置していることだと思いますが、テンプレートが検索された場所を知る方法はありません。だから私の質問は:

  1. このエラー メッセージは誤解を招くものではありませんか? それは次のようなものだったはずですtemplate not found: template.tpl
  2. テンプレートを検索するディレクトリはどこで確認できますか?

によって作成されたスナップアプリケーションが問題だと思いますsnap init。私はそれにわずかな変更を加えただけです:

  • App記録するフィールドをもう 1 つ追加しました。_myapp :: Snaplet Myapp
  • app初期化関数で、次を追加しました: n <- embedSnaplet "myapp" myapp myappInitn をレコードに渡しました。
  • 新しいファイルを作成しましsrc/Myapp.hsた。

の関連部分は次のMyapp.hsとおりです。

しかし、何らかの理由で、rendering submitに移動したときにコンソールに出力されているのに、 (レンダリングされたテンプレートではなく) HTTP 応答としてメッセージhttp://0.0.0.0:8000/myapp/submitを取得します。No handler accepted "/hsnews/submit"私はsubmit.tpl_submit.tplを持っていsnaplets/heist/myapp_templatesます。