2

これに対する解決策が見つからないので、ここに私の問題があります:

コレクションにアイテムを追加できる小さなフォームの検証を設定しました(observableArray、後でDBに実際に保存します)。

検証は最初のアイテムに対しては正常に機能し、検証メッセージが表示されますが、2 回目は検証メッセージが表示されません (検証自体は機能し、アイテムを追加することはできません)。

これが私がすることです:

  1. たとえば、 newSchool オブジェクトで検証を設定します

    self.City = ko.observable(item ? item.City : '').extend(
    {
        required: true
    });
    
  2. MainViewModel で検証グループを作成する

    self.schoolErrors = ko.validation.group({ schools: self.newSchool }, { deep: true });

  3. MainViewModel: エラーをチェックし、そうでなければコレクションにプッシュし、newSchool オブザーバブルを新しいデフォルト値で初期化します

    self.addSchool = function () {
        if (self.schoolErrors().length > 0) {
            self.schoolErrors.showAllMessages();
            return;
        }
        self.schools.push(self.newSchool());
        self.newSchool(new School());
        self.newSchool().load();
        self.schoolErrors = ko.validation.group({ schools: self.newSchool }, { deep: true  }); };
    

デバッグ上の理由から、学校オブジェクトの検証済みオブザーバブルの isValid および isModified 値を出力しました。これらは問題ないようです。最初のアイテムを挿入した後、 isValid と isModified は両方ともfalseに返されます。

唯一の問題は、前述のとおり、検証メッセージが表示されなくなったことです。

私にとっても奇妙です。計算フィールドに対して検証する必要がある1つのケースを除いて、カスタム検証メッセージテンプレートを使用しません。これは表示されますが、「組み込み」の検証メッセージは表示されません。

何か案が?

4

2 に答える 2

2

ノックアウト検証にプル リクエストを追加しただけで、knockout.validation.group が監視可能な配列の変更に反応しないという問題が修正されます。

https://github.com/Knockout-Contrib/Knockout-Validation/pull/223

于 2013-02-08T20:13:29.970 に答える
0

残念ながら、新しいアイテムが挿入されたときにグループが再評価されることはありません。配列をサブスクライブし、明示的に行います。

this.items.subscribe(function() {
     this.errors = ko.validation.group(this);
     this.errors.showAllMessages();
}, this);

http://jsfiddle.net/fYrbt/

フィドルでは CDN として Github を使用しているため、フィドルが機能しない場合は待機してリロードします。

于 2013-02-06T13:29:16.000 に答える