我正在编写一个非常简单的 Yesod 消息列表,它使用 AJAX 添加新列表项而无需重新加载页面(在其他用户修改数据库的情况下,或客户端自己添加项目的情况下)。这意味着我必须在 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')
);
}
我希望能够以某种方式统一这两种表示。我是不是运气不好,或者我可以以某种方式滥用小部件来生成 HTML 响应和在 JavaScript 文件中填写代码?
Note:
当然,我知道模板必须以非常不同的方式工作,因为 AJAX 调用是从 JS 对象获取其值,而不是从服务器获取。这是一个很长的镜头,但我想我会看看是否有人以前考虑过这个问题。