6

ノックアウト検証を使用して検証を追加しようとしているフォームのビューモデルがあります。

fromDate: ko.observable(
            moment().subtract('days', 1).startOf('day').format(dateFormat)
          ),
toDate: ko.observable(
            moment().startOf('day').format(dateFormat)
        ),

開始日が終了日よりも前であることを確認する必要があります。2番目のオブザーバブルへの参照を取得するためのカスタムバリデータを取得できないようです。次のようなものが必要です:

toDate: ko.observable(moment().startOf('day').format(dateFormat)).extend({
          validation: {
            validator: function (val, someOtherVal) {
                return moment(val) >= moment(someOtherVal);
            },
            message: 'Must be greater or equal to From Date',
            params: viewModel.fromDate()
          }
        }),

何か案は?

アップデート

私はすでにこれを試したと確信していますが、拡張メソッドを onload 関数に移動すると機能します。

$(function () {
    ko.validation.configure({ decorateElement: true });

    viewModel.toDate.extend({
    validation: {
            validator: function (val, someOtherVal) {
                return moment(val) >= moment(viewModel.fromDate());
            },
            message: 'To date must be greater than from date',
        }
    });

    ko.applyBindings(viewModel);
});
4

4 に答える 4

6

ノックアウト検証のコア ルールは、オブザーバブルを検証のパラメーターとして処理できません。しかし、それを修正するプッシュリクエストがすでにあります: https://github.com/ericmbarnard/Knockout-Validation/pull/217

したがって、そのためにはカスタム ロールを使用する必要があります。パラメータを関数として挿入する必要があります (括弧を省略して)。これにより、ノックアウト検証がパラメーターの変更に反応できるようになります。

function ViewModel() {
    var self = this; // capture this to be able to reference properties

    self.fromDate = ko.observable(
        moment().subtract('days', 1).startOf('day').format(dateFormat)
    );
    self.toDate = ko.observable(
        moment().startOf('day').format(dateFormat)
    ).extend({
      validation: {
        validator: function (val, someOtherVal) {
            return moment(val) >= moment(someOtherVal());
        },
        message: 'Must be greater or equal to From Date',
        params: self.fromDate
      }
    }),
}
于 2013-01-30T09:06:29.027 に答える
3

そのドキュメントを見ると、これはあなたができる方法のように見えます:

ko.validation.rules['greaterThan'] = {
    validator: function (val, otherVal) {
        return val > otherVal;
    },
    message: 'The field must be greater than {0}'
};

ko.validation.registerExtenders();

fromDate: ko.observable(
            moment().subtract('days', 1).startOf('day').format(dateFormat)
          ),
toDate: ko.observable(
            moment().startOf('day').format(dateFormat)
        ).extend({ greaterThan: fromDate() });

それはテストされておらず、fromDate() または fromDate を渡してからバリデーターで otherVal() を使用するかどうかはわかりません。

于 2013-01-29T12:40:05.507 に答える