0

我有一个 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");
        }
    }
}

它适用于所有选择和输入,但始终处于打开状态。如果有办法在第一个表单提交触发之前停用此绑定,我认为可以做到。

4

1 回答 1

0

需要有一种方法来重新应用绑定或导致绑定更新。尝试在视图模型的函数中放置一些代码activate来强制验证。

于 2013-06-26T16:29:35.047 回答