Validation 敲除验证在加载时立即进行评估
我使用MVC、Knockout和Knockout验证来验证我的视图模型 我遇到了一个问题,视图模型属性的验证在加载时立即启动。换句话说,“此字段是必需的”在用户试图更改其值之前显示在我的输入旁边 下拉(选择)控件尤其会出现此问题 我猜这是我无意中更改/访问/变异javascript代码另一部分中的可观察对象造成的问题。然而,我不知道如何找到这个 有没有一种方法可以让我订阅或跟踪在淘汰验证中引发验证的偶数?我只想知道为什么会这样。我非常确信isValid()函数的值始终为false 以下是如何在页面加载时轻松设置my HTML的示例:Validation 敲除验证在加载时立即进行评估,validation,knockout.js,knockout-validation,Validation,Knockout.js,Knockout Validation,我使用MVC、Knockout和Knockout验证来验证我的视图模型 我遇到了一个问题,视图模型属性的验证在加载时立即启动。换句话说,“此字段是必需的”在用户试图更改其值之前显示在我的输入旁边 下拉(选择)控件尤其会出现此问题 我猜这是我无意中更改/访问/变异javascript代码另一部分中的可观察对象造成的问题。然而,我不知道如何找到这个 有没有一种方法可以让我订阅或跟踪在淘汰验证中引发验证的偶数?我只想知道为什么会这样。我非常确信isValid()函数的值始终为false 以下是如何在页
<select class="highlightable validationElement" name="obsstate" data-bind="value: standardAnswers.ans106_1.value" required="true">
<option value="">-- Select -- </option>
<option value="AK">AK</option>
<option value="AL">AL</option>
etc...
</select>
--选择--
AK
艾尔
等
我自己解决了这个问题 问题存在于razor引擎对select选项进行模板化,然后将所选元素的值绑定到Knockout之间 尽管选择框中没有用户输入的值,默认值--select--“实际上包含一个值。在我的例子中,它是一个空字符串。因此,当我应用敲除绑定时,我的viewmodel属性被“更新”为空字符串值,因此启动了验证 为了解决这个问题,我将模型的默认值设置为空字符串。因此,当应用绑定时,不会在可观察到的敲除事件上触发valueHasMutated事件,因此不会进行验证。引用KO页。。。。() KO将在项目列表的前面加上一个显示文本“选择项目…”且值未定义的项目。因此,如果myChosenValue持有未定义的值(默认情况下,可观察对象会这样做),那么将选择dummy选项。如果optionsCaption参数是可观察的,则初始项的文本将随着可观察值的更改而更新 因此,我在定义属性时通过设置“undefined”解决了这个问题,请参见下面的示例:
self.myProperty = ko.observable(undefined).extend({
required : {"Field Required"}
});
希望这对应用viewmodel绑定后的…有所帮助。然后,对于该视图模型,将
showAllMessages
显示为false
示例
YourViewmodelname.errors.showAllMessages(false);
我将模型设置为空字符串,但它仍在加载时启动。我注意到的一点是,optionsCaptions:'Select…'确实放在项目中,但值不是value=“”它只是选择了…在我的情况下非常有用的语法:
ko.validation.group(viewModel()).showAllMessages(false)
@JonathanStrate感谢您发布此消息-在我的示例中,viewmodel.errors未定义,并且您的版本工作正常。在ko.applyBindings(…)之后,对错误进行分组并调用方法:ko.validation.group(yourViewModel,{deep:true})。showAllMessages(false);