淘汰赛绑定在Durandal应用程序中丢失

时间:2013-06-17 06:06:00

标签: durandal knockout-validation

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

适用于所有选择和输入,但始终打开。如果有办法停用此绑定,直到第一个表单提交触发,我认为会这样做。

1 个答案:

答案 0 :(得分:0)

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