0

私はJSFiddleで例を設定しましたhttp://jsfiddle.net/4stu2jg3/63/

数値以外の数字を追加してボタンをクリックすると、最初のテキストボックスに必要なメッセージが表示されます。値があるので、これは数値メッセージを表示する必要があると思いますか?

文字列を削除してボタンをクリックすると、2番目のテキストボックスに番号メッセージが表示されます。これで必要なメッセージが表示されると思いますか?

カスタム テンプレートをコメント アウトすると、すべてが期待どおりに機能します。何が間違っているのかわかりませんか?

<div id="test">
    <div><input data-bind="value: first" /></div>
    <div><input data-bind="value: last" /></div>

    <input type="button" value="Validate" />
</div>

<script type="text/html" id="qmsKoValidationTemplate">
    <span class="qms-val-panel" data-bind="visible: field.isModified() && !field.isValid(), text: field.error"></span>
</script>

ko.validation.init({
    registerExtenders: true,
    messagesOnModified: true,
    insertMessages: true,
    parseInputAttributes: false,
    messageTemplate: "qmsKoValidationTemplate"
});

var t = function() {
    var self = this;

    self.first = ko.observable()
        .extend({required: { message: 'Required' } })
        .extend({number: { message: 'Number' } });

    self.last = ko.observable('Del')
        .extend({required: { message: 'Required' } })
        .extend({number: { message: 'Number' } });
}

var s = new t();

ko.applyBindings(s, document.getElementById('test'));

$('input[type="button"]').click(function() {    
    //console.log(s.first(), s.last());
    //console.log(ko.validatedObservable(s).isValid())
    ko.validatedObservable(s).isValid()
});
4

1 に答える 1

1

少しのデバッグを使用するko.isObservable(field.error)と、問題の「変化しない」側面を説明する false が返されます。

よく見ると、カスタム バインド validationMessageは既定のテンプレートで使用されています。バインディングをこのカスタム バインディングに置き換えるtextと、目的の動作が得られるようです。

<span class="qms-val-panel" data-bind="visible: field.isModified() && !field.isValid(), validationMessage: field">        
</span>

修正されたフィドル

于 2014-11-11T22:01:22.043 に答える