問題タブ [hamlet]
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.
haskell - Data.Tree を使用した Yesod での HTML ページ コンテンツの生成
やあ!
各ノードに各ページの HTML コンテンツが含まれる Haskell の巨大なマルチノード ツリーがあるとします。
Yesod を使用して、ユーザーは URL /myPage と Handler を使用して Web ページにアクセスします。
が呼び出されます。
私が欲しいのは、現在のツリー ノードによって生成されるページの HTML コンテンツです。
ツリーでは、ルートから始めて、現在のノードの HTML コンテンツを抽出し、それを現在のページとして表示します。各ページには、ユーザーの選択を表す複数のボタンがあります。現在のノードの子ごとに 1 つのボタンがあります。次に、ユーザーの選択に応じて、ユーザーが選択した特定の子までツリーが 1 レベル下がり、新しい HTML コンテンツが表示されます。その後、ユーザーは別の選択を行うことができます。ツリーは再び 1 レベル下に移動し、新しい HTML コンテンツが表示されます。などなど。
基本的に、ユーザーが選択するたびに、リーフ ノードに到達するまでツリーが 1 レベル下がります。
Haskell の Zippers を使用してこれを実装することを考えていたので、ツリーを簡単に移動して、移動した場所のパンくずリストを保持できます。
Yesod でこれを実装するための良い解決策は何ですか? この優れたソリューションに、ジッパーの使用を含めてほしいと思います。
解決策の 1 つは、同じページで POST/Redirect/GET を使用してセッションを介してツリーを送信することですが、ツリーが大きすぎる場合は機能しません。
質問が十分に明確でない場合は、遠慮なく質問を明確にしてください。
前もって感謝します。
database - Yesod 内部ハムレットからレコードを取得する方法
質問: hamlet 内からMaybe PersistInt64 (おそらく primaryKey) を指定して、dataBase からレコードを取得するにはどうすればよいですか?
私がホームページを持っているとしましょう。
ログインしているユーザーが私のホームページにアクセスすると、
そのユーザーの名前が表示され、ログアウトするオプションが表示されます。
ログインしていない人が私のホームページにアクセスすると、
その人はログインを求められます。
Muid はおそらく PersistInt64です
。ログインしていない誰かがホームページにアクセスする
と、PersistInt64 の代わりに何もないレコードをフェッチしようとするとエラーが発生する
ため、hamlet コード内でユーザーのレコードを取得し
たいので、必要なのは
muid が何もなく、それが $maybe _ <- muid のコード ブロックにある場合に、userId 別名 (fromJust muid) でレコードを取得する
haskell - Yesod リソースと URL タイプの安全性の自動化
私は Yesod についてすべてを学ぶ使命を帯びてきましたが、ルーティング システムとサブサイトおよびクロスルート リンク全般との関係について (ある程度) 行き詰っています。最初に対処したいことはResourceR
、ルート定義と Hamlet リンク全体で見られる " " パターンです。
「タイプ」自体 ( ResourceR
) は、Yesod の TH DSL の外部でアドレス指定または参照されることはありません。これは、Yesod リンクを参照する際に Haskell の型安全性を活用するためだけに、実際にはダミー型としてのみ使用されているということですか? 関数getResourceR
などpostResourceR
はアプリが機能するために不可欠ですが、それらの定義がボイラープレート アプリ コードのどこで使用されているかは明示されていません。Yesod は単に@{ResourceR}
適切な関数への呼び出しを減らすだけですか?
私は自分自身をデータ型として定義すべきだとResourceR
常に感じていますが、実際には Yesod によって内部的に生成および縮小されています。
私の質問は、Hamlet と Route コードで参照されている「リソース タイプ」は、Yesod の DSL によって自動的に生成および削減されるのでしょうか?
前もって感謝します!
haskell - Hamlet で静的ファイルにリンクするには?
同じ質問のように聞こえる以前の質問を見ましたが、欠落しているはずの部分をスキップしているようです。
import Settings.StaticFiles
ハンドラ ファイルの先頭に行を追加しました。
yesod プロジェクトchunk.png
のフォルダーに呼び出されたファイルをコピーしました。static
ただし、何を試しても、常に次のようになります。
範囲外: 'chunk_png'
whamlet の前にstaticSite "static"
orを追加しようとしましたが、役に立ちませんでした。$(staticSite "static")
完全なコードは次のとおりです。
私もstaticFiles "static"
(の代わりにstaticSite
)試しましたが、エラーが発生します:
範囲外: 'staticFiles' おそらく 'staticSite' (Settings.StaticFiles からインポート)
inのエントリがあります。/static StaticR Static getStatic
config/routes
何か案は?
haskell - ハムレットの $if 式
私の Hamlet テンプレートには、次のような条件があります。
これは正常に動作します。これをもっと自然に書き直すと
また
その後、解析しません。エラーメッセージは次のとおりです。
コンパイル時のコードを実行しようとしたときの例外:
予期しない「&」
期待 ")"
これは不可解です。一部の二項演算子はサポートされていますが、他の演算子はサポートされていませんか?
$if
ハムレットのステートメントで使用できる表現の種類を管理するルールは何ですか?
haskell - ログインページをより凝ったものにしたり、あるウィジェットを別のウィジェットに挿入したりする
上記のコード (コンパイルされません) では、使用可能なすべての認証プロバイダーを html リスト (ul、li など) にリストしようとしています...
通常、ウィジェットは簡単に並べて組み合わせることができます: w1 >> w2 >> w3 ... あるウィジェットを別のウィジェットに注入 (!) する方法はありますか?
haskell - ファイルからハムレット テンプレートをレンダリングする
shakespeare
次のテンプレート コードがあると仮定します。
ファイルでmytemplate.hamlet
。
shamletFile
ソースコードにテンプレートを明示的に貼り付けずにレンダリングするにはどうすればよいですか?
注:この質問は Q&A スタイルですぐに回答されたため、意図的に研究努力を示すものではありません。