Javascript 带敲除的可重用属性验证

Javascript 带敲除的可重用属性验证,javascript,knockout.js,coffeescript,knockout-validation,Javascript,Knockout.js,Coffeescript,Knockout Validation,我有下面的类来验证名称,并且不允许用户输入空名称。使用它,我可以获得有效值,并在输入无效时通知用户(保留最后一个正确值) 我想让同样的功能更加可重用。有没有办法扩展ko.observable对象以添加“lastInvalid”和“trust”方法 比如: class @Person constructor: (name) -> @name = ko.observable(name).extend({ required: true }) 然后能够做到: person.name(

我有下面的类来验证名称,并且不允许用户输入空名称。使用它,我可以获得有效值,并在输入无效时通知用户(保留最后一个正确值)

我想让同样的功能更加可重用。有没有办法扩展ko.observable对象以添加“lastInvalid”和“trust”方法

比如:

class @Person
  constructor: (name) ->
    @name = ko.observable(name).extend({ required: true })
然后能够做到:

person.name()
person.name().lastInvalid()
person.name().attempt()
AFAIK不是这样工作的。它允许您输入无效值,然后告诉您该值是否有效

更新:

我添加了以下扩展程序,但它似乎没有做任何事情(我得到name.trunt未定义)


您的扩展程序不起作用,因为在
尝试
定义中有一个额外的
->
。因为当您想向计算机提供读写函数时,您需要提供对象文字而不是函数:

target.attempt = ko.computed
    read: target
    write: (value) ->
      if value.length > 0
        target value
        target.lastInvalid false
      else
        target.lastInvalid true
  target
您尝试从基础值而不是从可观察对象本身访问附加属性。所以你需要写:

person.name()
person.name.lastInvalid()
person.name.attempt()

演示。

由于在
尝试
定义中有一个额外的
->
,您的扩展器不起作用。因为当您想向计算机提供读写函数时,您需要提供对象文字而不是函数:

target.attempt = ko.computed
    read: target
    write: (value) ->
      if value.length > 0
        target value
        target.lastInvalid false
      else
        target.lastInvalid true
  target
您尝试从基础值而不是从可观察对象本身访问附加属性。所以你需要写:

person.name()
person.name.lastInvalid()
person.name.attempt()

演示。

哦,因为那个浪费了多少时间->哦,因为那个浪费了多少时间->