使用TypeScript自定义Knockout验证规则

时间:2013-03-28 13:02:09

标签: javascript knockout.js this typescript knockout-validation

这与我活跃的另一个问题非常相似,但也可能会将其视为不同的问题,并且可能会被不同的受众视为有用。

我有针对淘汰赛验证的自定义规则:

ko.validation.rules["sameAs"] = {
    validator: function (val, otherObservable) {
        return val === otherObservable();
    },
    message: "Value should be same as {0}, but differs"
};

现在在原始的javascript中这很好用,因为用法看起来像:

function SomeObject() {
   this.Email = ko.observable().extend({ required: true, email: true });
   this.ConfirmationEmail = ko.observable().extend({ required: true, email: true, sameAs: this.Email });
}

然而现在在Typescript的土地上,如果我试着写这个:

class SomeObject {
   public Email = ko.observable().extend({ required: true, email: true });
   public ConfirmationEmail = ko.observable().extend({ required: true, email: true, sameAs: this.Email });
}

我现在收到错误:

  

关键字'this'不能在类体中的初始值设定项中引用,   或者在超级构造函数调用中

这是有道理的,但是我不知道我怎么能做我原本做的事情,除非我试图将它破解成构造函数或其他什么东西,这使得我的课程现在看起来有点可怕。

1 个答案:

答案 0 :(得分:2)

我找不到写作的任何缺点:

class SomeObject {
    public Email = ko.observable();
    public ConfirmationEmail = ko.observable();

    constructor() {
        this.Email.extend({ required: true, email: true });
        this.ConfirmationEmail.extend({ required: true, email: true, sameAs: this.Email })
    }
}

除了2行代码之外。

在我看来,代码可读性要好一点,你不必阅读整条长行来看看它是什么类型的变量。 执行此分离可以更好地显示代码中发生的情况。也许它是一个美学的东西,但我发现混合变量声明与'extend'表达式有时难以阅读,特别是当'extend'非常错误...扩展:)。