如何在 Ruby on Rails 中访问 rails 帮助程序和嵌入在资产中的 ruby javascript 文件中



我有一个显示和隐藏div,单击时显示和隐藏评论。默认情况下,在单击之前,它会显示消息计数和一些向下箭头,例如

"55 评论 [向下箭头]"

单击时,它将变为:

"隐藏评论 [向上箭头]"

我使用此代码来显示默认情况下的评论量和箭头(用户/新):

    <span class="commentsCount"><%= pluralize(m.comments.count, 'comment') %></span>
    <span class="commentArrows"><%= image_tag 'view_all_comments.png' %> </span>

我使用 JQuery 来帮助实现更改(users/load_comments.js.erb):

$('.postHolder').off().on('ajax:success', '.view_all_comments', function(){
    var postContent = $(this).parents('.post_content'),
        commentContainer = postContent.find('.comment_container'),
        getComments = "<%= j render 'users/partials/show_all_comments' %>";
        commentContainer.slice(0, -2).remove();
// The next 2 lines replace the comment count with "Hide comments" and up arrows"
          postContent.find('.commentsCount').html("Hide comments");
          postContent.find(".commentArrows img").prop("src", "/assets/up_arrows.png");
             postContent.find('.comment_container:first').before(getComments);
});

现在重要的部分是再次单击隐藏评论。我需要它恢复为显示评论计数。我可以将箭头恢复为原始箭头,但我看不到文本恢复到评论帐户的方法,因为我无法访问 rails 助手和我的实例变量等在我的资产/javascripts/users.js文件中。

以下是代码(assets/javascripts/users.js:

    // for showing and hiding comments
        $('.expandComments').click(function() {
        var showAllCommentsSubmit = $(this).find('.showAllCommentsSubmit'),
            postContent = $(this).parents('.post_content'),
            commentContainer = postContent.find('.comment_container');

            if ($(this).hasClass('visible')) {
                postContent.find(".comment_container").slice(0, -1).hide();
                postContent.find(".commentArrows img").prop("src", "/assets/view_all_comments.png");
//Here is where I need the code to replace the "Hide comments" text.
            }  else {

                if (showAllCommentsSubmit.is(':disabled')) {
                    postContent.find(".comment_container").show();
                    postContent.find(".commentArrows img").prop("src", "/assets/hide_comments.png");
                } else {
                    showAllCommentsSubmit.trigger('submit');
                    showAllCommentsSubmit.prop({disabled: true});
                    postContent.find(".commentArrows img").prop("src", "/assets/comments-loader.gif");
                }
            }
            $(this).toggleClass('visible');
        });

由于我认为不可能在资产javascript文件中使用嵌入式Ruby/rails助手,因此我如何能够实现我想要实现的目标。

有没有办法在其他 html 之上显示一些 html,然后在不再需要时将其删除并再次显示下面的 html?

我敢肯定,我可以想出其他一些解决方案,例如将一些 css 带入游戏......有一个div 隐藏和显示,但我还没有弄清楚我该怎么做。想知道是否有快速的解决方案。

您可以在资产代码中使用 Rails 帮助程序。你基本上只需要将你的资产从users.js重命名为users.js.erb,Rails将在将内容作为JavaScript发出之前用ERb对其进行预处理。

有关详细信息,请查看有关资产管线中预处理的 Rails 指南。

最新更新