2009-08-20 35 views
0

我正在尝试制作一个类似于Reddit的线索评论系统:我在评论上单击“回复”,表单显示出来。该表单有一个“取消”按钮,用于删除表单,返回原始状态。使用Rail的原型助手形式显示/隐藏效果

我试图用一个link_to_function添加表单,并且表单本身有一个button_to_function来删除自己和表单。所以由link_to_function生成的javascript需要逃过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 %> 

我在做什么错?

回答

0

我不确定你为什么没有工作,但是这里有一个替代方法来做你正在做的事情。除了在DIV中插入和删除文本,您可以在该元素上执行Show/Hide(我删除表格内容,但格式大致相同):

<!-- comments/_form.html.erb --> 
    <%= button_to_function 'Cancel', "$('reply_comment_blah').hide()" %> 
</p> 

<!-- comments/_comment.html.erb --> 
<div id="comment_blah"> 
    Hello! 
</div> 

<div id="reply_comment_blah", style="display: none;"><%= render :partial => 'form' %></div> 

<%= link_to_function 'Reply' , "$('reply_comment_blah').show()" %> 
0

虽然这在技术上可以完全按照您指定的方式进行,但我认为编码中存在一个错误,因为您已在JavaScript中使用JavaScript。我确定在那里有一个Yo Dawg的玩笑。内部JavaScript的第二位可能未被正确引用。

你可能做的不是使用replace_html函数,而是将部分设置隐藏起来,然后关闭和打开可见性。

或者,您可以尝试通过任何必要的方法来修复编码。

我只是假设在这里。如果你可以发布这个输出,肯定会更容易说出来。