0

做一个带有评论的小演示迷你博客应用程序。使用 ROR 和 HAML。我希望使用 AJAX 创建评论,所以我编写了 create.js.haml。如果在创建过程中出现任何错误,我也希望出现错误。

创建.js.haml

:plain
if #{@comment.errors.any?} {
  $("#CommentError").html("#{escape_javascript(render(:partial => "error"))}");
  $("#CommentError").attr("style", "display: inline");
} else {
  $("#CommentsTable").append("#{escape_javascript(render(@comment))}");
  $("#CommentError").attr("style", "display: false");}

这行不通。条件计算结果为trueorfalse但不执行代码。但是,如果我将条件的任何部分放在它自己的 create.js.haml 中,它就可以工作。

这在出现错误的情况下有效:

:plain
  $("#CommentError").html("#{escape_javascript(render(:partial => "error"))}");
  $("#CommentError").attr("style", "display: inline");

这在没有错误的情况下有效,我需要添加评论:

:plain
  $("#CommentsTable").append("#{escape_javascript(render(@comment))}");
  $("#CommentError").attr("style", "display: false");

这是观点,尽管我认为问题不存在:

%p
  %strong Title:
  = @post.title

%p
  %strong Text:
  = @post.text

%h3 Comments:
.CommentsArea
  = render @post.comments

#CommentError{:style => 'display: none'}  

%h2 Add a comment:
= render "comments/form"

= link_to 'Back', posts_path
|
= link_to 'Edit', edit_post_path(@post)
4

2 回答 2

2

也许这会起作用(我现在自己无法检查)

- if @comment.errors.any?
  :plain
    $("#CommentError").html("#{escape_javascript(render(:partial => "error"))}");
    $("#CommentError").attr("visible", "true");
- else
  :plain
    $("#CommentsTable").append("#{escape_javascript(render(@comment))}");
    $("#CommentError").attr("visible", "false");
于 2013-11-10T14:05:56.353 回答
0

我认为你在这里混合了 Ruby 和 Javascript 有点太多了。试试这个。

if @comment.errors.any?
  :javascript
    $("#CommentError").html("#{escape_javascript(render(:partial => "error"))}");
    $("#CommentError").attr("visible", "true");
else
  :javascript
    $("#CommentsTable").append("#{escape_javascript(render(@comment))}");
    $("#CommentError").attr("visible", "false");

更多文档:http ://haml.info/docs/yardoc/file.REFERENCE.html#javascript-filter

于 2013-11-10T14:35:03.677 回答