0

私はdurandal/knockoutJSをknockout.validation.jsで使用しているSPAを持っています。{view}.js 内にこのセットがあります

        ko.validation.configure ({
        decorateElement: true,
        registerExtenders: true,
        messagesOnModified: true,
        insertMessages: false,
        messageTemplate: null,
        parseInputAttributes: true,

    });

そして、私が持っているビューの1つの中に

 <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' は、ナビゲーション後に要素に再適用されていません。フィールドが 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 に答える