【问题标题】:How to render partials on page load within a Haml file in Rails如何在 Rails 中的 Haml 文件中呈现页面加载部分
【发布时间】:2020-02-14 07:50:24
【问题描述】:

如何从 Haml 文件的 JavaScript 标记中呈现部分内容?

我希望在页面加载完成后显示“保存”按钮。

目前,文件(部分)如下所示:

.form-group.form-actions
  .col-sm-offset-2.col-sm-10
    %button.btn.btn-primary{type: "submit", name: "save"
      %i.icon-white.icon-ok
      = t("Save")

我将%button.btn.btn-primary 部分移动到另一个部分文件_save_button.html.haml 并尝试了以下操作:

.form-group.form-actions
  .col-sm-offset-2.col-sm-10
    :javascript
      $(document).ready( function() {
        $.ajax({
          type: "GET",
          url: "<%= render partial: 'save_button' %>" ,
          success: function(data){
            //if ever there is something more to do (there is also an error handler)
          }
        });
      });

但这没有任何影响,保存按钮没有出现。

如何在加载时加载部分内容?

【问题讨论】:

  • 你在使用turbolinks吗?如果是这样,您将需要收听$(document).on "turbolinks:load", -&gt;,如docs 中所述。另外,我不知道你认为url: "&lt;%= render partial: 'save_button' %&gt;" 会/应该做什么,但对我来说它看起来像一团糟。

标签: javascript ruby-on-rails ruby haml partial-views


【解决方案1】:

您可以在 JavaScript 代码中渲染 Haml 部分,但您需要转义 HTML,以免浏览器认为它是代码:

someHtml = "#{ j render(partial: 'your_partial') }";

jescape_javascript 的快捷方式。

对于 Haml,您需要 #{ ... } 而不是 &lt;%= ... %&gt;

【讨论】:

    【解决方案2】:

    对于初学者来说,看起来好像您在 URL 中使用了 ERB 语法。 &lt;%= 开头不是 HAML 语法。

    至于在 JavaScript 方法中呈现部分,我认为 Ajax 不是您想要的。您已经在使用$(document).ready,因此您在其中执行的任何操作都应该在文档加载后发生。

    【讨论】:

    • 是的,好点,不知道我想要那个。我现在已经试过了::javascript $(document).ready( function() { #{ = render :partial =&gt; 'save_button'} }); 我在尝试运行时得到unexpected '=' #{= render :partial =&gt; 'save_button'}
    • 去掉“=”符号,运行正常。不幸的是,我的保存按钮没有出现,我在我的 chrome 控制台中收到“Uncaught SyntaxError: Unexpected token '
    • 那是因为 Javascript 不理解 HAML 语法 - 不幸的是,我不相信你能够在 Javascript 中从 HAML 渲染 Ruby
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    相关资源
    最近更新 更多