2013-02-21 68 views
0

我試圖覆蓋產品/ _cart_form中的數字輸入元素,以避免用戶修改數量 如果對erb代碼或html執行Deface覆蓋Rails對輸入erb元素的Deface,無法正確覆蓋

我用下面的覆蓋WO任何成功 似乎是html選擇和ERB代碼....混亂和麻煩,沒有明顯的例子是這樣的污損github上自述

Deface::Override.new(
    :virtual_path => %q{spree/products/_cart_form}, 
    :name => %q{read_only_qty_cart_form}, 
    :set_attributes => %q{#cart-form form div.add-to-cart input}, 
    :attributes => {:readonly => 'readonly'} 
) 

的混合spree/products/_cart_form.erb代碼是(與輸入元素相關的)

<div class="add-to-cart"> 
     <% if @product.on_sale? %>  
     <%= number_field_tag (@product.has_variants? ? :quantity : "variants[#{@product.master.id}]"), 
      1, :class => 'title', :in => [email protected]_hand, :min => 1 , :readonly => true %> 
     <%= button_tag :class => 'large primary', :id => 'add-to-cart-button', :type => :submit do %> 
      <%= t(:add_to_cart) %> 
     <% end %> 

,並生成以下HTML:

<div data-hook="cart_form" id="cart-form"> 
     <form method="post" action="/fr/orders/populate" accept-charset="UTF-8"> 
      <div ... name="authenticity_token"></div> 
       <div...... data-hook="inside_product_cart_form" id="inside-product-cart-form"> 
        <div class="columns five alpha " data-hook="product_price"> 
          <div id="product-price">....</div> 
          <div class="add-to-cart"> 
            <input type="number" value="1" name="variants[1001480408]" min="1" max="Infinity" id="variants_1001480408" class="title"> 
            <button type="submit" id="add-to-cart-button"..... > 
          </div> 
        </div> 
       </div> 
      </form> 
    </div> 
+0

我採取怎樣污損動態視圖硬調試,最後我認爲這是不可能的。 deface在不引入變量綁定的情況下解析視圖。如果動態內容取決於變量,那麼選擇器無法找到它 – raykin 2013-07-25 06:57:30

回答

1

您試圖污損生成的元素。在erb文件(輸入元素尚不存在)上運行Deface。

嘗試使用代碼污損這樣的:

Deface::Override.new(
    :virtual_path => "spree/products/_cart_form", 
    :name => "read_only_qty_cart_form", 
    :insert_bottom => "code[erb-loud]:contains('number_field_tag (@product.variants_and_option_values.any?')", 
    :text => ", :readonly => 'readonly'" 
)