AJAX を使用して、ページをリロードせずに新しいリスト アイテムを追加する非常に単純な Yesod メッセージ リストを作成しています (他のユーザーがデータベースを変更する場合、またはクライアント自身がアイテムを追加する場合)。これは、Halmet テンプレート (ページが最初に読み込まれるとき) と Julius テンプレート (動的な追加が行われるとき) の両方で、メッセージ項目の HTML 構造をエンコードする必要があることを意味します。それらは次のようになります。
でhomepage.hamlet
:
$if not $ null messages
<ul id=#{listId}>
$forall Entity mid message <- messages
<li id=#{toPathPiece mid}>
<p>#{showMarkdown $ messageText message}
<abbr .timeago title=#{showUTCTime $ messagePosted message}>
そしてでhomepage.julius
:
function(message) {
$('##{rawJS listId}').prepend(
$('<li>')
.attr('id', message.id)
.append('<p>' + message.text + '</p>')
.append($('<abbr class=timeago />')
.attr('title', message.posted).timeago())
.slideDown('slow')
);
}
この 2 つの表現を何らかの方法で統一できるようにしたいと考えています。私は運が悪かったのでしょうか、それともウィジェットを悪用して、HTML 応答を生成し、JavaScript ファイルにコードを入力することはできますか?
Note:
もちろん、AJAX 呼び出しはサーバーからではなく JS オブジェクトから値を取得するため、テンプレートの動作が大きく異なることは理解しています。それは遠いショットですが、誰かがこれについて前に考えたことがあるかどうか見てみようと思いました.