let*_*lly 20 validation knockout.js knockout-validation
我正在使用MVC,Knockout和Knockout Validation来验证我的视图模型.
我遇到了一个问题,即视图模型属性的验证在加载时立即触发.换句话说,在用户尝试更改其值之前,"我需要此字段"显示在我的输入旁边.
下拉(选择)控件特别发生此问题.
我猜这是我通过某种方式无意中更改/访问/改变我的javascript代码的另一部分中的observable而创建的问题.但是,我不知道如何追踪这一点.
有没有办法,我可以以某种方式订阅或跟踪甚至导致Knockout验证中的验证的火灾?我只需要知道为什么它会以它的方式发射.我非常确信isValid()函数的值始终为false.
以下是我在页面加载时设置HTML的方式示例,不受干扰:
<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>
Run Code Online (Sandbox Code Playgroud)

小智 21
在为viewmodel应用绑定之后.然后为该视图模型制作showAllMessages为false
例
YourViewmodelname.errors.showAllMessages(false);
Run Code Online (Sandbox Code Playgroud)
小智 10
引用KO页面....(http://knockoutjs.com/documentation/options-binding.html)
KO将在项目列表的前面加上一个显示"选择项目..."文本的项目,并且值为undefined.因此,如果myChosenValue保持未定义的值(默认情况下可观察到的值),则将选择虚拟选项.如果optionsCaption参数是可观察的,则初始项的文本将随着observable的值更改而更新.
所以,我在定义属性时通过设置"undefined"来解决它,参见下面的示例:
self.myProperty = ko.observable(undefined).extend({
required : {"Field Required"}
});
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助...
我自己想出了这个问题.
剃刀引擎模板化选择选项之间存在问题,然后将所选元素的值绑定到Knockout.
尽管选择框中没有用户输入的值,但默认值"--select--"实际上包含一个值.在我的情况下,它是一个空字符串.因此,当我应用knockout绑定时,我的viewmodel属性被"更新"了空字符串值,因此验证被触发.
为了解决这个问题,我将模型的默认值设置为空字符串.因此,当应用绑定时,在Knockout observable上没有触发valueHasMutated事件,因此没有验证.
| 归档时间: |
|
| 查看次数: |
8642 次 |
| 最近记录: |