我有一个SPA,我正在使用带有knockout.validation.js的Durandal / KnockoutJS。在{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。我可以在firebug中看到输入字段现在已应用此类 input-member validationElement
我不知道 validationElement 来自哪里 - 但是有些东西搞砸了敲除绑定。我已经尝试将验证配置移动到shell.js中,但结果是相同的(反正不是一个好主意)。
修改:
到目前为止看起来像 errorElementClass:'input-validation-error'在导航后没有被重新应用于元素。如果字段被修改为聚焦清除,则验证将正常激活。 validationElement 是errorElementClass
的占位符更新
在the github site找到了这一点信息,似乎是在
之后的事情 {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");
}
}
}
适用于所有选择和输入,但始终打开。如果有办法停用此绑定,直到第一个表单提交触发,我认为会这样做。
答案 0 :(得分:0)
需要有一种方法来重新应用绑定或导致绑定更新。尝试在视图模型中强制验证的activate
函数中添加一些代码。