1

次のプロパティを持つモデルがあるとします。

function ViewModel() {
     this.SetupTime = ko.observable();
     this.CloseTime = ko.observable();
     this.MinHrs = ko.observable();
}

MinHrs > (SetupTime + CloseTime) となるように検証ルールを追加する必要があります。3 つのフィールドのいずれかが変更されるたびに、この検証が開始されます。これにはカスタム検証を作成する必要があることはわかっています。たとえば、次のようになります。

    ko.validation.rules['ValidWorkRange'] = {
    validator: function (val, setuptime, closetime, minhrs) {
        return minhrs > (setuptime+closetime);
    },
    message: '(Shift End - Shift Start) >= Shortest Work Segment'
};

私が行ったことが正しいかどうかはわかりません。また、オブザーバブル内でこの検証を呼び出す方法もわかりません。

誰かが私を助けてくれますか?前もって感謝します

4

2 に答える 2

2

はい、その通りです。目標を達成するには、カスタム検証を作成する必要があります。また、検証関数を呼び出す必要はありません。関連する依存関係 (オブザーバブル) が変更されるたびに自動的に呼び出されます。

ワーキング・フィドル

: 数値などの他の必要な検証を適用してください。fiddle コードの入力フィールドにテキストを入力すると、結果がエラーになる可能性があるためです。

カスタム検証コードは次のとおりです。

var ValidWorkRange = function(val, param)
{
  if(val && param){
  var minHrs = parseInt(val, 10);
  var setupTime = parseInt(param[0](), 10);
  var closeTime = parseInt(param[1](), 10);
  return minHrs > (setupTime+closeTime);
  }
};

そして、このようにオブザーバブルに適用できます:

function ViewModel() {
     var self = this;

     self.SetupTime = ko.observable();
     self.CloseTime = ko.observable();
     self.MinHrs = ko.observable().extend
     ({
       validation: { 
         validator: ValidWorkRange, 
         message: 'Not valid.', 
         params: [self.SetupTime, self.CloseTime] 
       }
     });
}
于 2013-04-04T11:48:17.430 に答える
1

ko検証についてはあまり知りませんが、おそらくあなたにとって役立つでしょう

https://github.com/ericmbarnard/Knockout-検証

于 2013-04-04T11:08:53.480 に答える