Пиша много прост списък със съобщения Yesod, който използва AJAX за добавяне на нови елементи от списък без презареждане на страницата (както в случай на други потребители, които променят базата данни, или самият клиент добавя елемент). Това означава, че трябва да кодирам HTML структурата на елементите на съобщението както в шаблона Halmet (когато страницата се зарежда първоначално), така и в шаблона Julius (когато се случи динамичното добавяне). Те изглеждат по следния начин:
In 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 обект, а не от сървъра. Това е голям шанс, но реших да видя дали някой е мислил за това преди.