1


KnockoutJs検証プラグインを使用しようとしましたが、問題が発生しました。入力からデータを投稿する前に値を検証し、正しい場合は投稿してビューモデルをデフォルトの状態にリセットし、値が正しくない場合は css クラスを追加して (またはエラーメッセージを追加して) 入力を赤い境界線にラップします)。問題は、これが一度しか機能しないことです: データを投稿した後、ビューモデルをデフォルトの状態にリセットすると (前に述べたように)、入力フィールドが空になり、この空のデータを投稿しようとすると検証は機能しますが、css クラスは機能しません。 t 適用します (エラー メッセージは表示されません)。私のフィドルの例を試してみてください。何が問題なのですか?

* [アップデート]。

だから、回避策を見つけました: data-bind 属性に追加のコードを追加するだけです

validationElement: itemToAdd().Name

そのはず

<input data-bind='value: itemToAdd().Name, validationElement: itemToAdd().Name' />

動作しますが、見栄えが悪いです。とにかく、誰かが私の以前のコードを修正できれば、それは良いことです。

4

2 に答える 2

0

変更するだけ

var t = ko.validation.group(viewModel.itemToAdd())

var t = ko.validation.group(viewModel.itemToAdd)
于 2012-08-13T09:59:26.597 に答える
0

私の答えを例示するフィドルをまとめました。

これにアプローチする 1 つの方法は、activeAccountオブジェクトにプロパティ (私は mine と呼びます)を持たせることです。これはerrors、そのオブジェクトのすべての検証メッセージを保持します。

var activeAccount = function(data) {
    this.Id = ko.observable(data.id);
    this.Name = ko.observable(data.name).extend({ required: { message: 'Enter account name.'} });
    this.UserId = ko.observable(1);
    this.errors = ko.validation.group(this);
};

var viewModel = {
    items: ko.observableArray([]), 
    itemToAdd: ko.observable(new activeAccount({})),
    createItem: function (item) {
        if (item.errors().length == 0) {
            viewModel.items.push(item);
            viewModel.itemToAdd(new activeAccount({}));
        } else {
            item.errors.showAllMessages();
        }
    }
};

項目を保存したら (サーバーへの投稿、observableArray へのプッシュ、またはその両方) 、コンストラクターに空のオブジェクトを渡して項目itemToAddを に設定し、「リセット」します。new activeAccount({})

于 2013-04-09T15:28:16.753 に答える