2015-09-27 17 views
6

HAML konusunda yeni bir hata yaşıyorum: Illegal nesting: nesting within plain text is illegal.. Şu anda, erb'imi haml'e değiştirmeye çalışıyorum ama işe yaramıyor. İşte benim erb.Yasadışı iç içe geçirme: Düz metin içinde iç içe geçme kuraldışı

<script src="https://js.braintreegateway.com/v2/braintree.js"></script> 
<h2 class="mbs">New Subscription 
</h2> 
<%= simple_form_for :subscription, :url => subscribe_subscription_path(@plan.id), :id => "checkout-form" do |f| %> 
    <% if current_user and !current_user.has_payment_info? %> 
    <%= render 'customer_form'%> 
    <% end %> 
    <br/> 
    <p> Please enter payment details: </p> 
    <div id="payment-form"></div> 
    <div id="coinbase-container-id"></div> 
    <div class="form-actions"> 
    <%= f.submit t(:subscribe), :class => 'btn btn-primary' %> 
    </div> 
    <script charset="utf-8" type="text/javascript"> 
    var clientToken = "<%= @client_token %>"; 
    braintree.setup(clientToken, "dropin", { 
     container: "payment-form", 
     coinbase: { container: "coinbase-container-id" } 
     }); 
    </script> 
<% end %> 

Benim HAML geçerli:

%script{:src => "https://js.braintreegateway.com/v2/braintree.js"} 
%h2.mbs 
New Subscription 
= simple_form_for :subscription, :url => subscribe_subscription_path(@plan.id), :id => "checkout-form" do |f| 
    - if current_user and !current_user.has_payment_info? 
    = render 'customer_form' 
    %br/ 
    %p Please enter payment details: 
    #payment-form 
    #coinbase-container-id 
    .form-actions 
    = f.submit t(:subscribe), :class => 'btn btn-primary' 
    %script{:charset => "utf-8", :type => "text/javascript"} 
    var clientToken = "#{@client_token}"; 
    braintree.setup(clientToken, "dropin", { 
     container: "payment-form", 
     coinbase: { container: "coinbase-container-id" } 
    }); 

yanlış olan nedir? Bu hata neden gösteriliyor?

cevap

8

Sorun script etiketinde geçerli:

%script{:charset => "utf-8", :type => "text/javascript"} 
    var clientToken = "#{@client_token}"; 
    braintree.setup(clientToken, "dropin", { 
    container: "payment-form", 
    coinbase: { container: "coinbase-container-id" } 
    }); 

hat container: "payment-form", önceki çizgiden daha fazla girintili edilir ve Haml bir blok olarak veya bir etiketin içeriğine olarak ayrıştırmak çalışıyor, ancak Önceki satır düz metin ve bunlardan birine sahip değil.

bunun altında karışık girinti verir :javascript filter kullanabilirsiniz düzeltmek için:

:javascript 
    var clientToken = "#{@client_token}"; 
    braintree.setup(clientToken, "dropin", { 
    container: "payment-form", 
    coinbase: { container: "coinbase-container-id" } 
    }); 

:javascript filtresi de <script> etiketi ekler. Bu etiketin özelliklerini kontrol etmek için bir nedeniniz varsa, kendi etiket satırınızla :plain filter'u kullanabilirsiniz:

%script{:data => {:example => "Foo"}} 
    :plain 
    var clientToken = "#{@client_token}"; 
    braintree.setup(clientToken, "dropin", { 
     container: "payment-form", 
     coinbase: { container: "coinbase-container-id" } 
    }); 
+0

Çok teşekkürler! Bu işe yaradı! :) – ClauCece

İlgili konular