0

私のviewModelをThewadsのアドバイスに従ってvalidatedObservableに変更していた提案された変更を含む作業サンプルを表示するように更新されました。物事が流れるようになるまでにはかなりの時間がかかりましたが、正しいエラー数が表示されるようになりました!

<fieldset>
    <legend>Test</legend>
     <label>First name: <input data-bind='value: model.Employee.FirstName'/></label>
     <label>Last name: <input data-bind='value: model.Employee.LastName'/></label>
    <button type="button" data-bind='click: buttons.submit'>Submit</button>
</fieldset>


<script>

my = {namespace: { }}
my.namespace.obj = function () {
    var bindingHandler = function (data) {

        initializeValidation = (function () {
            ko.validation.configure({
                registerExtenders: true,
                decorateElement: true,
                messagesOnModified: true,
                insertMessages: true,
                parseInputAttributes: true,
                messageTemplate: null,
                grouping: { deep: true }
            });
        })();

         viewModel = ko.validatedObservable({
             model: ko.mapping.fromJS(data),
             buttons: {
                 submit: function () {
                     if (viewModel.isValid()) {
                         alert('VM clean');
                     } else {
                         alert('Errors found');
                         viewModel.errors.showAllMessages();
                     }
                 }
             }

        });

         extendedValidators = (function () {
             viewModel().model.Employee.FirstName.extend({ minLength: 20, required: true });
             viewModel().model.Employee.LastName.extend({ minLength: 30, required: true });
         })();

         applyBindings = (function () {
             ko.applyBindings(viewModel);
         })();
    }
    return {
        fn: {
            Initialize: function (model) {
                bindingHandler(model);
            }
        }
    };
};

$(document).ready(function () {
    model = { "Employee": { "FirstName": "Joe", "LastName": "Shmoe" } };
    my.namespace.obj().fn.Initialize(model);
});

4

2 に答える 2

2

通常のオブザーバブルだけでなく、適切に検証するには、validatedObservable を使用する必要があります。

次のようになります。

validationCheck = ko.validatedObservable( whatYouAreValidating() ) )
if (validationCheck.isValid() )
     //do your logic

または、検証グループを使用して:

validationGroupCheck = ko.validation.group( whatYouAreValidating())

if ( validationGroupCheck().length <= 0 )
    return true
于 2013-01-31T09:25:44.797 に答える
0

私はそれをまったく実行させることができません。jsFiddleで実行できますか?

ただし、奇妙に見えることの1つは、メソッドを呼び出すコードが何もないextendedValidatorsため、バリデーターが初期化されていないことです。それがあなたの投稿から欠落しているだけでない限り?

于 2013-01-31T08:56:50.813 に答える