0

ディレクティブによって生成されたフォームにフィールドがあります。

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())

ここで私の質問は次のとおりです。なぜこれが発生するのですか。上記の客観的に恐ろしいハックなしでどうすれば回避できますか?

ありがとう!

4

0 に答える 0