Я пытаюсь создать систему многопоточных комментариев, которая будет вести себя как Reddit: я нажимаю «Ответить» в комментарии, появляется форма. Эта форма имеет кнопку «Отмена», которая удаляет форму, возвращаясь к исходному состоянию.
Я пытаюсь добиться этого с помощью одного link_to_function
, который добавляет форму, а сама форма имеет button_to_function
для удаления себя и формы. Поэтому javascript, сгенерированный link_to_function
, должен был экранировать HTML с экранированным javascript, и по какой-то причине он не работает (нажатие кнопки «Ответить» ничего не делает). Это работает нормально, если я не добавлю кнопку «Отмена». Вот что у меня есть:
<!-- comments/_comment.html.erb -->
<div id="comment_<%= comment.id %>">
<%= h comment.content %>
</div>
<div id="reply_comment_<%= comment.id %>"></div>
<%= link_to_function 'Reply' do |page|
page.replace_html "reply_comment_#{comment.id}",
render(:partial => 'comments/form', :locals => {:comment => comment,
:commentable => comment.commentable})
end
%>
и
<!-- comments/_form.html.erb -->
<% form_tag(comments_path) do %>
<%= hidden_field_tag 'comment[parent_id]', comment && comment.id %>
<%= hidden_field_tag 'comment[commentable_id]', commentable.id %>
<p>
<%= text_area_tag 'comment[content]' %>
</p>
<p>
<%= submit_tag 'Send' %>
<% if comment %>
<%= button_to_function 'Cancel' do |page|
page.replace_html "reply_comment_#{comment.id}", ''
end
%>
<% end %>
</p>
<% end %>
Что я делаю не так?