ViewModelには、次のように(同じプロパティで)正規表現の検証が必要ないくつかのプロパティがあります。
// ...other properties...
MaxDays: ko.observable("").extend({
required: { message: "You have to specify the maximum number of days." },
pattern: {
message: "Please enter a valid number.",
params: '[0-9]+$',
maxLength: 10
}
}),
// ...other properties...
Jasmineを使用してテストしていますが、式と一致しない値を割り当てると、その値は無視され、そのプロパティにデータがないかのように「必須」の独自のテストが実行されることに気付きました。
// ... describe, other "it" statements, etc...
it("should complain if there's incorrect data", function () {
viewModel.MaxDays("Zweiundzwanzig");
expect(viewModel.errors().length).toBeGreaterThan(0);
expect(viewModel.errors()).toContain('Please enter a valid number.');
console.log(viewModel.errors());
});
// ...
テストを実行すると失敗します。エラーコレクションはエラーでいっぱいですが、数値であるはずの文字列を入力したためではありません。プロパティが空であると見なされるため、失敗します。「pattern」からのメッセージではなく、「required」からエラーメッセージが表示されます。
面白い部分は、UIで機能することです。そのため、そのプロパティにバインドされたフィールドに移動して文字列値を入力すると、正規表現の検証が実行され、フィールドの横に正しいエラーメッセージが表示されます。
私がここで欠けているものを誰かが指摘できますか?