2

私はこれに似たViewModelを持っています(簡略化):

var Person = function(){
    var self = this;
    self.Name = ko.observable();
    self.LastName = ko.observable();
    self.DriverId = ko.observable();
}

var MainViewModel = function(){
    var self = this;
    self.People = ko.observableArray();
}

Driver Id が配列の各要素に対して一意であることを検証する必要があります。これを行う最善の方法は何ですか?MVC 属性を作成することは可能ですか? コレクションではなく特定のクラスに対してのみ行ったので、方法がわかりませんでした。

ViewModel を使用した JsFiddle は次のとおりです: http://jsfiddle.net/amhedh/VgJ59/6/

4

1 に答える 1

4

配列内の people オブジェクトのdriverIdプロパティが変更されるたびに、 people 配列全体をチェックするKnockout Custom Validatorを作成できます。Validator は一致に応じて true または false を返し(重複するエントリが見つかった場合は false を返し、それ以外の場合は true を返します)、さらに ko 検証を行うとエラー メッセージが自動的に挿入されます。

あなたのために仕事をするカスタムバリデーターを作成しました。バリデータは次のとおりです。

var Unique = function(val, params)
{
  var isValid = true;
      ko.utils.arrayFirst(params[0](), function(item){
       if(val === item[params[2]]() && item !== params[1])
       {
           isValid = false;
           return true;
       }
      });
  return isValid;
};

そして、ここに使用法があります:

....
.....
self.DriverId = ko.observable(person.DriverId).extend
 ({
   validation: { 
     validator: Unique, 
     message: 'DriverId is duplicate.', 
     params: [viewModel.People, self, 'DriverId']
   }
});
... 
....

デモ フィドル (driverId テキスト ボックスの値を変更して検証を確認します)

于 2013-04-14T04:04:01.183 に答える