我通过修改一点 Railscast 147 教程在 Rails 4 应用程序中设置了一个可排序的嵌套表单,一切正常。在我的项目中,每个都li
包含fields_for
一个嵌套资源的字段,包括一个复选框。我的问题是我想根据包含复选框的位置来处理复选框信息li
。另外,如果其中一个输入被选中,这也会影响其他字段。我为此编写了一个 jquery 函数(主要是通过addClass
and removeClass
),并将对该函数的调用放在我的 sortable 和事件处理程序中。
process_components = (o) ->
$components = $(o).find('li')
// other stuff
$components.removeClass("parent_component child_component")
$components.find('input.is_child').each ->
firstcheck = $(this).prop('checked')
secondcheck = $(this).closest('li').next().find('input.is_child').prop('checked')
if firstcheck is true
$(this).closest('li').addClass('child_component')
if firstcheck is false and secondcheck is true
$(this).closest('li').addClass('parent_component')
$('#components-list').sortable
axis: 'y'
items: "> li.component"
update: ->
$.post($(this).data('update-url'), $(this).sortable('serialize'))
process_components $(this)
$('#components-list').on 'click', ':checkbox', (event) ->
process_components '#components-list'
我的问题是,这只有在手动对列表元素进行几次排序后才能正常工作(元素只有在列表中的位置发生变化后才会响应复选框状态)。我在这里和谷歌上环顾四周,但我找不到任何关于为什么会发生这种情况的线索。它可能与 Jquery 和 Jquery UI 在处理方面的差异有关addClass
吗?有想法该怎么解决这个吗?谢谢