名前を検証し、ユーザーが空の名前を入力できないようにする次のクラスがあります。これにより、有効な値を取得し、入力が無効な場合はユーザーに通知できます (最後の適切な値を保持します)。
class @Person
constructor: (name) ->
@name = ko.observable name
@nameLastInvalid = ko.observable false
@nameAttempt = ko.computed
read: @name
write: (value) =>
if value.length > 0
@name value
@nameLastInvalid false
else
@nameLastInvalid true
owner: @
同じ機能をもっと再利用できるようにしたい。ko.observable オブジェクトを拡張して「lastInvalid」および「attempt」メソッドを追加する方法はありますか?
何かのようなもの:
class @Person
constructor: (name) ->
@name = ko.observable(name).extend({ required: true })
そして、できるようになります:
person.name()
person.name().lastInvalid()
person.name().attempt()
私の知る限り、ノックアウト検証はこのようには機能しません。無効な値を入れて、それが有効かどうかを教えてくれます。
アップデート:
次のエクステンダーを追加しましたが、何もしないようです (name.attempt is undefined が表示されます)。
ko.extenders.required = (target, option) ->
target.lastInvalid = ko.observable false
target.attempt = ko.computed ->
read: target
write: (value) ->
if value.length > 0
target value
target.lastInvalid false
else
target.lastInvalid true
target