我現在有使用繭產生的輸入形式,並希望使通過它可排序創建的輸入字段(使用來自jQuery的UI可排序)。使用繭(嵌套表格)和jQuery可排序一起
的嵌套形式的代碼是:
<%= f.simple_fields_for :checkout_procedures do |procedure| %>
<li><%= render 'checkout_procedure_fields', :f => procedure %></li>
<% end %>
<div class="links">
<%= link_to_add_association 'add step', f, :checkout_procedures %>
</div>
的部分是渲染(_checkout_procedure_fields)是:
<div class="checkout_procedure nested-fields">
<table>
<tr>
<td><%= f.input :step %></td>
<td><%= link_to_remove_association "remove step", f %></td>
</tr>
</table>
</div>
我能夠通過將它們的內部獲得排序現有元素<div>
並將其設置爲使用jQuery進行排序:
<div class="sortThese">
<%= f.simple_fields_for :checkout_procedures do |procedure| %>
<li><%= render 'checkout_procedure_fields', :f => procedure %></li>
<% end %>
</div>
<div class="links">
<%= link_to_add_association 'add step', f, :checkout_procedures %>
</div>
<script>
$(document).ready(function() {
$(".sortThese").sortable();
});
</script>
但是,這樣做打破繭的link_to_add_association
和link_to_remove_association
的功能。使用<ul>
與<li>
也會導致相同的Cocoon故障。我一直在四處尋找破解一些JavaScript,在進出排序的div移動每個輸入表格(這樣做似乎使鏈接重新工作),但顯然這是不雅。如果有人有任何建議,我會很感激他們!
不知道從哪個版本,但目前軌道'fields_for'(這是由'simple_fields_for'包裹)增加了一個隱藏的輸入字段爲'id'。你可以通過給'simple_fields_for'選項':include_id => false'來跳過這個。這將刪除隱藏的輸入,然後排序將像以前一樣再次運行。 – nathanvda
謝謝@nathanvda。這對我有用。唯一需要改變的其他事情是在部分字段中添加id作爲隱藏輸入,因爲我仍然需要id作爲我的嵌套對象。 – sdoxsee