1

我在 Spree 工作,我正在尝试使用 Deface 来改变这一点

<% if order.has_step?("delivery") %>
  <div class="columns alpha four" data-hook="order-ship-address">
    <h6><%= Spree.t(:shipping_address) %> <%= link_to "(#{Spree.t(:edit)})", checkout_state_path(:address) unless @order.completed? %></h6>
    <%= render :partial => 'spree/shared/address', :locals => { :address => order.ship_address } %>
  </div>
<% end %>

<% if @order.has_step?("delivery") %>
  <div class="columns alpha four">
    <h6><%= Spree.t(:shipments) %> <%= link_to "(#{Spree.t(:edit)})", checkout_state_path(:delivery) unless @order.completed? %></h6>
    <div class="delivery">
      <% order.shipments.each do |shipment| %>
        <div>
          <i class='fa fa-truck'></i>
          <%= Spree.t(:shipment_details, :stock_location => shipment.stock_location.name, :shipping_method => shipment.selected_shipping_rate.name) %>
        </div>
      <% end %>
    </div>
    <%= render(:partial => 'spree/shared/shipment_tracking', :locals => {:order => @order}) if @order.shipped? %>
  </div>
<% end %>

..进入这个。

<div class="columns alpha four" data-hook="order-ship-address">
  <h6><%= Spree.t(:shipping_address) %> <%= link_to "(#{Spree.t(:edit)})", checkout_state_path(:address) unless @order.completed? %></h6>
  <%= render :partial => 'spree/shared/address', :locals => { :address => order.ship_address } %>
</div>

我已经提交了关于冗余 if 语句的拉取请求,并在第二个 if @order.has_step?("delivery") 中添加了一个数据挂钩,但同时我需要编写一个会更改页面的破坏覆盖到我需要它的样子。我可能可以删除第一个 if @order.has_step?("delivery") 因为我认为如果我写的话,Deface 将针对我在页面上谈论的第一个实例

:remove => "erb[silent]:contains('if order.has_step?(\"delivery\"')")

虽然说实话,文档在这一点上并不是很好。无论如何,我怎样才能删除整个第二个 if 语句?没有针对它的数据挂钩,并且使用

:remove_content => "erb[silent]:contains('if order.has_step?(\"delivery\"')")

只是删除第一个 if 语句的内容。我不能在第二个 if 语句中定位第一个 div,因为第一个 if 语句中已经有一个 div class="columns alpha 四"。我不想在页面上留下一个空的 div,我该怎么办?

4

2 回答 2

0

我向 Spree 发布的拉取请求使整个问题变得毫无意义(如果您有兴趣,可以在这里找到:https ://github.com/spree/spree/pull/5692 )。此外,事实证明,@order 和 order 在该文档中的功能完全相同,并且所有对 @order 的引用都在从 Spree 中删除的过程中。

于 2014-12-02T18:56:35.177 回答
0

引用代码中的两个 if 语句不引用同一个变量。第一个if是指order,第二个是指@order

当使用 deface 删除 erb 的现有部分时,传递给 contains 的字符串必须与您要移动的代码完全匹配,以便覆盖正确定位它。由于第二个if语句使用@order,并且您的匹配器不包含 @ 符号,因此它不会删除该特定 if 语句。

根据 deface repo 中的 rspec 测试,您目前似乎无法在remove操作中使用多个匹配字符串和一个覆盖。相反,您必须使用第二个覆盖来处理第二个 if 语句并将其删除。

于 2014-12-01T21:34:05.483 回答