Я пишу very simple Yesod message list, который использует AJAX для добавления новых элементов списка без перезагрузки страницы (как для других пользователей, изменяющих базу данных, так и для самого клиента, добавляющего элемент). Это означает, что я должен кодировать структуру HTML элементов сообщения как в шаблоне Halmet (при загрузке страницы изначально), так и в шаблоне Julius (когда происходит динамическое добавление). Они выглядят примерно так:Повторное использование виджетов Yesod в результатах AJAX
В 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, а не от сервера. Это длинный выстрел, но я думал, что посмотрю, подумал ли кто-нибудь об этом раньше.
Спасибо! Я действительно рассматривал отправку HTML, и этот подход, вероятно, имеет больше смысла. Yesod уже позволяет вам запрашивать ответы HTML или JSON (или любые другие) на основе типа запроса. –