这个帖子上有很多帖我觉得没用,我需要找出原因和方法。
我用两个控件下拉列表和文本框制作了一个小提琴,并使用.extend
My fiddle
问题1:当我第一次加载页面时,我会在下拉列表旁边看到验证错误,但不会在文本框旁边显示?我很困惑为什么会这样。
问题2:好的。它在加载时显示错误消息很尴尬所以我计划在加载时禁用显示的错误消息。添加了这一行ko.validation.init({ insertMessages: false });
。通过这个我摆脱了加载错误信息显示。但是,当我点击提交时,我 会在textbox或dropdwon旁边找到错误消息文本。
单向或其他下拉列表无法显示错误文本。
非常感谢任何可行的方法。
答案 0 :(得分:2)
要在加载时禁用消息,您需要此指令
self.Errors.showAllMessages(false)
这将在首次加载时禁用所有消息。设置这对你没有帮助
ko.validation.init({ insertMessages: false })
对于你的第一个问题,你必须这样做
<select data-bind='blah,validationElement:TextBoxField' >
这将导致它。希望它有所帮助。
答案 1 :(得分:1)
如果您订阅了您的observable,您会看到country
实际上是按ko加载设置的,而代码(demo)的情况并非如此:
self.Code.subscribe(function () { alert("Codes changed"); });
self.country.subscribe(function () { alert("Country has changed"); });
这是由处理select
的方式(我相信如何处理options binding
)引起的,并解释了为什么在country
上进行验证。
insertMessages: false
会隐藏所有消息,然后您需要使用validationMessage binding
处理它们。
只需删除您的observable(demo)的初始值:
self.Code = ko.observable();
self.country = ko.observable(); // no ""
答案 2 :(得分:0)
使用它是完美的:
ko.validation.group(yourViewModel, { deep: true }).showAllMessages(false);
但是必须在调用applyBindings之后完成:
ko.applyBindings(yourViewModel);
否则它不起作用。