ruby-on-rails – 非法嵌套:在纯文本中嵌套是非法的

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 非法嵌套:在纯文本中嵌套是非法的前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是HAML的新手,我有一个错误:非法嵌套:在纯文本中嵌套是非法的..目前,我正在尝试将我的erb更改为haml但它无法正常工作.这是我的问题.
  1. <script src="https://js.braintreegateway.com/v2/braintree.js"></script>
  2. <h2 class="mbs">New Subscription
  3. </h2>
  4. <%= simple_form_for :subscription,:url => subscribe_subscription_path(@plan.id),:id => "checkout-form" do |f| %>
  5. <% if current_user and !current_user.has_payment_info? %>
  6. <%= render 'customer_form'%>
  7. <% end %>
  8. <br/>
  9. <p> Please enter payment details: </p>
  10. <div id="payment-form"></div>
  11. <div id="coinbase-container-id"></div>
  12. <div class="form-actions">
  13. <%= f.submit t(:subscribe),:class => 'btn btn-primary' %>
  14. </div>
  15. <script charset="utf-8" type="text/javascript">
  16. var clientToken = "<%= @client_token %>";
  17. braintree.setup(clientToken,"dropin",{
  18. container: "payment-form",coinbase: { container: "coinbase-container-id" }
  19. });
  20. </script>
  21. <% end %>

我的HAML是:

  1. %script{:src => "https://js.braintreegateway.com/v2/braintree.js"}
  2. %h2.mbs
  3. New Subscription
  4. = simple_form_for :subscription,:id => "checkout-form" do |f|
  5. - if current_user and !current_user.has_payment_info?
  6. = render 'customer_form'
  7. %br/
  8. %p Please enter payment details:
  9. #payment-form
  10. #coinbase-container-id
  11. .form-actions
  12. = f.submit t(:subscribe),:class => 'btn btn-primary'
  13. %script{:charset => "utf-8",:type => "text/javascript"}
  14. var clientToken = "#{@client_token}";
  15. braintree.setup(clientToken,coinbase: { container: "coinbase-container-id" }
  16. });

怎么了?为什么会出现错误

解决方法

问题出在您的脚本标记中:
  1. %script{:charset => "utf-8",:type => "text/javascript"}
  2. var clientToken = "#{@client_token}";
  3. braintree.setup(clientToken,{
  4. container: "payment-form",coinbase: { container: "coinbase-container-id" }
  5. });

行容器:“payment-form”比前一行缩进,并且Haml试图将其解析为块或标记内容,但前一行是纯文本,并且没有任何一个那些.

要修复它,你可以使用:javascript filter,它允许在它下面混合缩进:

  1. :javascript
  2. var clientToken = "#{@client_token}";
  3. braintree.setup(clientToken,coinbase: { container: "coinbase-container-id" }
  4. });

:javascript过滤器还会添加< script>标签.如果您有理由控制此标记属性,可以将:plain filter与您自己的标记行一起使用:

  1. %script{:data => {:example => "Foo"}}
  2. :plain
  3. var clientToken = "#{@client_token}";
  4. braintree.setup(clientToken,coinbase: { container: "coinbase-container-id" }
  5. });

猜你在找的Ruby相关文章