【问题标题】:Custom Knockout Validation Rules with TypeScript使用 TypeScript 的自定义剔除验证规则
【发布时间】:2013-03-18 22:22:06
【问题描述】:

这与我提出的另一个问题非常相似,但不妨提出不同的问题,并且可能会被不同的受众发现有用。

我有一个用于敲除验证的自定义规则:

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”, 或在超级构造函数调用中

这是有道理的,但是我不确定如何做我最初会做的事情,除非我尝试将它破解到构造函数或其他东西中,这使得我的类现在看起来有点可怕。

【问题讨论】:

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


    【解决方案1】:

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

    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 })
        }
    }
    

    另外两行代码除外。

    在我看来,代码的可读性要好一些,您不必阅读整个长行来查看它是什么类型的变量。 进行这种分离可以更好地显示代码中发生的情况。也许它是一种美学的东西,但我发现将变量声明与“扩展”表达式混合有时难以阅读,尤其是当“扩展”相当错误时......扩展:)。

    【讨论】:

    • 就像你说的个人偏好一样,我更喜欢在一个地方查看与该变量相关的所有内容,而不是在其他地方查看,我也更喜欢我的 PO*O 对象没有构造函数他们没有逻辑,但就像你说的那样,这解决了问题。
    猜你喜欢
    • 2017-07-25
    • 2017-12-01
    • 2014-04-22
    • 2017-04-11
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    相关资源
    最近更新 更多