我有一个 SPA,我在其中使用 Durandal / KnockoutJS 和 knockout.validation.js。在 {view}.js 我有这个集合
ko.validation.configure ({
decorateElement: true,
registerExtenders: true,
messagesOnModified: true,
insertMessages: false,
messageTemplate: null,
parseInputAttributes: true,
});
在我的其中一个观点中
<input class="input-member"
type="text"
data-bind="value: memberno, validationOptions: { errorElementClass: 'input-validation-error' }"/>
当视图第一次被激活时,元素正确地应用了样式 input-validation-error。
在随后加载视图时,没有按我的要求应用 css。我可以在萤火虫中看到输入字段现在应用了此类输入成员验证元素
我不知道validationElement是从哪里来的——但是有些东西被淘汰赛绑定搞砸了。我已经尝试将验证配置移动到 shell.js 中,但结果是一样的(无论如何也不是一个好主意)。
编辑:
到目前为止看起来errorElementClass: 'input-validation-error' 在导航后没有被重新应用到元素。如果该字段是 modified-focused-cleared ,则验证正常触发。validationElement是 errorElementClass 的占位符
更新
在github 站点上找到了一些信息,这似乎是我所追求的
在 {view}.js 中
function activate() {
vm.memberno.isModified(false);
return true;
}
上面的代码似乎适用于输入字段,但不适用于选择字段。我正在考虑的另一个想法是像这样添加一个绑定处理程序
ko.bindingHandlers.validationElement = {
update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var valueIsValid = valueAccessor().isValid();
if (!valueIsValid) {
$(element).addClass("input-validation-error");
} else {
$(element).removeClass("input-validation-error");
}
}
}
它适用于所有选择和输入,但始终处于打开状态。如果有办法在第一个表单提交触发之前停用此绑定,我认为可以做到。