如果在HAML javascript中正常工作,则无法获取

时间:2013-11-10 13:42:28

标签: javascript jquery ruby-on-rails ajax haml

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

create.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");}

这不起作用。条件评估为truefalse,但代码未执行。但是如果我在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)

2 个答案:

答案 0 :(得分: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");

答案 1 :(得分: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