【问题标题】:Deface in spree home index疯狂房屋指数中的污点
【发布时间】:2013-11-19 17:08:05
【问题描述】:

我正在尝试使用 Deface 的 DSL 向我的 home#index 添加一些内容。

我在 app/overrides/spree/home/index/add_home_index_steps.html.erb.deface 有一个文件 内容如下:

<!-- insert_before 'erb:contains("content_for :sidebar do")' -->
<h1>Hola</h1>

但结果是:

<div id=wrapper" class="row" data-hook>
  <aside id="sidebar" class="columns four" data-hook>
    <div data-hook="homepage_sidebar_navigation">...</div>
  </aside>
  <div id="content" class="columns twelve" data-hook>
    <h1>Hola</h1>
    <div data-hook="homepage_products">...</div>
  </div>
</div>

我所期待的:

<div id=wrapper" class="row" data-hook>
  <h1>Hola</h1>
  <aside id="sidebar" class="columns four" data-hook>
    <div data-hook="homepage_sidebar_navigation">...</div>
  </aside>
  <div id="content" class="columns twelve" data-hook>
    <div data-hook="homepage_products">...</div>
  </div>
</div>

如果我使用insert_after而不是insert_before,结果是:

<div id=wrapper" class="row" data-hook>
  <aside id="sidebar" class="columns four" data-hook>
    <h1>Hola</h1>
    <div data-hook="homepage_sidebar_navigation">...</div>
  </aside>
  <div id="content" class="columns twelve" data-hook>
    <div data-hook="homepage_products">...</div>
  </div>
</div>

我很困惑,谁能解释一下,我做错了什么。

【问题讨论】:

    标签: ruby-on-rails spree deface


    【解决方案1】:

    这很容易混淆,所以让我们看看发生了什么。侧边栏代码是:

    https://github.com/spree/spree/blob/2d31d8a69d66e2555e00f67e3227a54a531aa6b8/frontend/app/views/spree/shared/_sidebar.html.erb

    <aside id="sidebar" class="columns four" data-hook>
      <%= yield :sidebar %>
    </aside>
    

    https://github.com/spree/spree/blob/v2.1.2/frontend/app/views/spree/home/index.html.erb

    <% content_for :sidebar do %>
      <div data-hook="homepage_sidebar_navigation">
        <%= render :partial => 'spree/shared/taxonomies' %>
      </div>
    <% end %>
    
    <div data-hook="homepage_products">
      <%= render :partial => 'spree/shared/products', :locals => { :products => @products } %>
    </div>
    

    评估时,inin content_for :sidebar 将替换 yield :sidebar

    你的问题是当你在做 insert_before.你得到这个:

    <h1>Hola</h1>
    <% content_for :sidebar do %>
      <!-- stuff that goes in to the sidebar -->
    <% end %>
    
    <div data-hook="homepage_products">...</div>
    

    content_for 可以出现在该文件中的任何位置,这并不重要,因为它只是说明产量中的内容。所以在输出中,它会出现在 homepage_products div 之前,这就是你在输出中得到的。

    Insert_after 执行以下操作:

    <% content_for :sidebar do %>
      <h1>Hola</h1>
      <!-- stuff that goes in to the sidebar -->
    <% end %>
    
    <div data-hook="homepage_products">...</div>
    

    所以我希望它会出现在正在生成的部分中。像这样的:

    <aside id="sidebar" class="columns four" data-hook>
      <h1>Hola</h1>
      <!-- stuff that goes in to the sidebar -->
    </aside>
    

    这也是你所看到的。

    如果您希望某些内容出现在侧边栏之前,如您的示例所示,您应该进行不同的覆盖。您应该覆盖 spree/shared/_sidebar 和 insert_before #sidebar

    希望能解决问题。

    【讨论】:

      猜你喜欢
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多