Knockout JS敲除验证插件

时间:2012-11-30 23:09:34

标签: knockout.js

我有一个带有select属性的viewModel。该物业位于ko.validatedObservable({})内。我正在使用不同的ko.validatedObservable()部分分隔不同的视图。我的输入验证正常,除非select正在从页面加载验证,即使在init()我有messagesOnModified: true(因为我不想在首次加载页面时显示错误消息)。第一个选项有value=""。我检查了标记并设置了data-orig-title="REQUIRED",而其他输入控件将此属性设置为"",因为它应该是

有人可以指出为什么选择表现不同?我还要补充一点,我正在使用剃刀生成Select @Html.DropDownListFor(x=>x.dest_provincia, Model.Items, new { data_bind="dest_provincia"}) 这是验证的样本

(在viewModel上)

self.dest_provincia = ko.observable().extend({ required: { message: "REQUIRED"} });

这放在里面:

self.userValidation = ko.validatedObservable({
        rem_provincia: this.rem_provincia
)};

我注意到验证是在select上发生的,因为正在触发更改事件,但我不知道是什么使它...? 更新:我尝试通过在ajax调用中循环$ .each并在knoackout中填充observableArray来创建select by razor。在任何情况下,更改事件都是在页面加载时触发......!

1 个答案:

答案 0 :(得分:2)

我今天设法解决了这个问题。

剃刀引擎模板化选择选项之间存在问题,然后将所选元素的值绑定到Knockout。

尽管选择框中没有用户输入的值,但默认值“--select--”实际上包含一个值。在我的情况下,它是一个空字符串。因此,当我应用knockout绑定时,我的viewmodel属性被“更新”了空字符串值,因此验证被激活。

为了解决这个问题,我将模型的默认值设置为空字符串。因此,当应用绑定时,在Knockout observable上没有触发valueHasMutated事件,因此没有验证。