ディレクティブによって生成されたフォームにフィールドがあります。
ng-pristine、ng-valid、ng-valid-required として開始されます。(サーバー側のリクエストを介して入力されます)。
Railsフォーム処理との互換性を確保するために、削除ボタンがあります。これは単純に削除し、送信ボタンの直前に複製して非表示に追加します。
onclick ロジックは次のとおりです。
scope.removeDecisionRule = (index, e) ->
parent = angular.element(e.target).parent()
unless parent.hasClass('brand-new')
parent = parent.clone()
# parent.css("display", "none")
parent.find('input[name$="[_destroy]"]').val("1")
parent.appendTo('form').eq(0)
scope.decisionRules.splice(index, 1)
['_destroy'] フィールドは Rails の要件ですが、スプライスは、初期フォームに入力する配列からそれを削除し、制御をディレクティブに渡し、ページから要素を削除します。
要素がページに表示されます (そのため、display=none はコメントアウトされています)。
ただし、フォームを送信すると、角度検証によってフラグが立てられたように見えます (入力ボックスのアウトラインが赤くなります)。まだ ng-pristine、ng-valid、ng-valid-required に設定されています。
入力ボックスに入り、その値を編集 (文字を削除してから readd) すると、ブロックが削除されます。したがって、ハックは、scope.decisionRules.splice の前に次を追加することです。
parent.find("input").each (index, element)->
angular.element(element).val(angular.element(element).val())
ここで私の質問は次のとおりです。なぜこれが発生するのですか。上記の客観的に恐ろしいハックなしでどうすれば回避できますか?
ありがとう!