0

コメント付きの小さなデモ ミニブログ アプリを実行しています。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");}

これはうまくいきません。true条件は または のいずれかに評価されますfalseが、コードは実行されません。しかし、条件の一部を 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 に答える