我有一个使用验证规则的Eureka表单和valueHasBeenChanged
来反映每个表单字段的验证状态。另外,我想显示整个表单的验证状态(通过着色/启用“确定”按钮)。为此,我在FormViewController
中使用row.isValid
回调函数。我遍历所有行并测试isValid
。但是,似乎RowOf<T>.didSet
反映了之前的状态实际更改的值。
如何以干净的方式实现预期的机制(即,不是摆弄全局变量等)?
答案 0 :(得分:0)
回调确实在isValid
中调用,但validationErrors.isEmpty
给出validationErrors
的结果。在行的内部_value
设置后,validationOptions
列表会更新,从而导致我的问题中描述的行为。据我了解,无论行row.validate()
中的设置是什么,都是这样的。
我的补救措施是在我的valueHasBeenChanged
函数中调用isValid
以在我读取行的<?php
//connect to localhost
$sql = mysql_connect("localhost","root","");
if(!$sql)
{
echo "Connection Not Created";
}
$con = mysql_select_db("tigress_ihl");
if(!$sql)
{
echo "Database Not Connected";
}
$data[] = array('Gender','Number');
$sql = "Select count(userprofile_userid) as count, userprofile_gender from mdl_local_info_userprofile group by userprofile_gender";
$query1 = mysql_query($sql);
while ($result = mysql_fetch_array($query1))
{
$data[] = array($result['userprofile_gender'],(int)$result['count']);
}
echo json_encode($data);
?>
状态之前明确触发验证。额外调用行验证规则的成本可以忽略不计
对我来说。
答案 1 :(得分:0)
实现点击表单验证的一种更简单的方法是添加
.cellUpdate { cell, row in
if !row.isValid {
cell.titleLabel?.textColor = .red
}
}
对每一行进行编码,使用. validatesOnDemand
作为该行的验证规则,然后在按钮操作中调用form.validate()
。
例如:
<<< TextRow() { row in
row.title = ""
row.tag = "firstName"
row.add(rule: RuleRequired())
row.validationOptions = .validatesOnDemand
}
.cellUpdate { cell, row in
if !row.isValid {
cell.backgroundColor =.red
cell.titleLabel?.textColor = .red
} else {
cell.backgroundColor = .clear
cell.titleLabel?.textColor = .white
}
}
...
form.validate()