我正在尝试使用Deface在Spree Admin的表格中的列中添加按钮。但我无法让我的CSS类选择器正确。我可以使用数据挂钩选择表行,并且可以选择子元素(例如td,span),但不能通过特定类(在本例中为.balance_due)进行选择。我错过了一些简单的事情吗?
我的覆盖:
Deface::Override.new(:virtual_path => "spree/admin/orders/index",
:name => "add_capture_order_shortcut2",
:insert_bottom => "[data-hook='admin_orders_index_rows'] .balance_due",
:text => '<h1>hey yo, your balance is due</h1>'
)
我已经使用jQuery确认了CSS选择器,即:
$("[data-hook='admin_orders_index_rows'] .balance_due")
=> [<span class="state balance_due">…</span>]
生成的HTML的一个例外:
<tr data-hook="admin_orders_index_rows" class="state-complete odd">
...
<td class="align-center"><span class="state balance_due"><a href="/admin/orders/R617712280/payments">balance due</a></span></td>
...
</tr>
答案 0 :(得分:5)
在呈现之前,Deface会对实际的.html.erb
模板执行操作,而不是生成的输出。
您需要确保选择器匹配直接在虚拟路径中指定的模板中的内容。
狂欢模板的相关行是:
<td class="align-center"><span class="state <%= order.state.downcase %>"><%= Spree.t("order_state.#{order.state.downcase}") %></span></td>
请注意,.balance_due
未直接在模板中指定,而是从变量中指定。
解决这个问题的最简单方法是覆盖整个
[data-hook='admin_orders_index_rows']
包含您的内容,或使用一些奇特的CSS选择器(如:first-child
)来获取您想要的确切部分。
解决此问题的更好方法是使用数据挂钩向spree提交拉取请求,以允许人们选择具有污损的特定行。如果有人决定重新订购或添加新行,那么将来破坏的可能性就会小得多。