我有一个带有选择属性的 viewModel。该属性放置在 ko.validatedObservable({})
内。我用不同的 ko.validatedObservable() 部分分隔不同的 View 。我的输入验证正常,除了选择从页面加载验证,即使在 init()
中我有 messagesOnModified: true
(因为我不想在第一次时显示错误消息加载页面)。第一个选项具有 value=""
。我检查了标记,并设置了 data-orig-title="REQUIRED"
,而其他输入控件已将此属性设置为 ""
,因为它应该是
有人能指出为什么选择的行为不同吗?我还应该补充一点,我正在使用 razor @Html.DropDownListFor(x=>x.dest_provincia, Model.Items, new { data_bind="dest_provincia"})
生成选择
这是验证示例
(在 View 模型上)
self.dest_provincia = ko.observable().extend({ required: { message: "REQUIRED"} });
这被放置在里面:
self.userValidation = ko.validatedObservable({
rem_provincia: this.rem_provincia
)};
我注意到验证发生在选择上,因为正在触发更改事件,但我不知道是什么造成的..? 更新:我尝试通过 razor 创建选择,通过在 ajax 调用中循环 $.each 并在 knoackout 中填充 observableArray 。无论如何,更改事件都会在页面加载时触发...!?
最佳答案
我今天成功解决了这个问题。
Razor 引擎对选择选项进行模板化,然后将所选元素的值绑定(bind)到 Knockout 之间存在问题。
尽管选择框中没有用户输入的值(默认值),但“--select--”实际上包含一个值。就我而言,它是一个空字符串。因此,当我应用 knockout 绑定(bind)时,我的 viewmodel 属性被“更新”为空字符串值,因此触发了验证。
为了解决这个问题,我将模型的默认值设置为空字符串。因此,当应用绑定(bind)时,Knockout 可观察对象上不会触发 valueHasMutated 事件,因此不会进行验证。
关于knockout.js - Knockout JS knockout 验证插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13654524/