0

Rails 4 アプリケーションで、Railscast 147 チュートリアルを少し変更して、並べ替え可能なネストされたフォームをセットアップしましたが、すべて正常に動作します。私のプロジェクトでは、チェックボックスを含む、ネストされたリソースのフィールドでそれぞれをliラップします。fields_for私の問題は、チェックボックスを含むの位置に応じてチェックボックス情報を処理したいということですli。さらに、入力の 1 つがチェックされた場合、これは他のフィールドにも影響するはずです。これを行うための jquery 関数を作成し (主に and を介しaddClassremoveClass)、この関数の呼び出しをソート可能およびイベント ハンドラーに配置しました。

  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'

私の問題は、リストの要素を手動で数回並べ替えた後にのみ、これが適切に機能することです (要素は、リスト内の位置が変更された後にのみチェックボックスの状態に応答します)。私はこことGoogleを見回しましたが、なぜこれが起こるのかについての手がかりを見つけることができませんでした. Jquery と Jquery UI の処理の違いと何か関係があるのaddClassでしょうか? これを修正する方法についてのアイデアはありますか? ありがとう

4

1 に答える 1

0

ある日、私はそれを理解した後、実際にfields_forは犯人でした. なぜそれが起こるのかわかりませんが、レンダリングされたページのさまざまな要素を調べると、:idRails によって生成される隠しフィールドがli、他のすべてのコンポーネント フィールドを含む の子として配置されていないことがわかりました。代わりに、非表示フィールドは、最初はそれを含む:idの兄弟として表示されるため、DOM 内の間違った要素を対象としています。ソート可能でさまざまな をドラッグした後、正しい DOM 構造が確立され、すべてが機能します。したがって、これに対する解決策は、フィールドを指定して明示的に含めることにより、Rails のデフォルトをオーバーライドすることです。このようにして、ページが読み込まれるとすべてが機能します。liprocess_componentslif.fields_for(:components, include_id: false)<%= f.hidden_field :id %>fields_for

于 2013-11-08T18:49:16.967 に答える