我在通过指令生成的表单中有一个字段:
它以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)
splice将其从填充初始表单的数组中删除,从而将控制权转交给指令,该指令随后从页面中删除元素,而['_destroy']字段是rails要求。
元素出现在页面上(这就是为什么display = none被注释掉了。)
然而,在表单提交时,似乎会通过角度验证进行标记(输入框轮廓变为红色)。它仍然设置为ng-pristine,ng-valid,ng-valid-required。
输入输入框并编辑其值(删除一个字符,然后读取),删除该块。所以hack是在scope.decisionRules.splice:
之前添加以下内容 parent.find("input").each (index, element)->
angular.element(element).val(angular.element(element).val())
现在我的问题是:为什么会出现这种情况,如果没有客观上可怕的黑客攻击,我该如何避免呢?
谢谢!