【发布时间】:2017-12-02 03:31:44
【问题描述】:
我有一个域属性,我想验证两件事;
- 网址存在(可访问)
- URL 存在于我的本地数据库中。
为了检查这些内容,我使用 https://github.com/Knockout-Contrib/Knockout-Validation 创建了异步验证规则,并将它们都应用到我的属性上。
发生的情况是,每次来自某个规则的响应较早时,它将isValidating 属性设置为false,我希望此属性为true,直到我的第二个规则的响应到来。
-
自定义规则:
export function enableCustomValidators() { (ko.validation.rules as any)["urlValidationServicePath"] = { async: true, validator: function (url: string, baseUrl: string, callback: any) { getRequest(url, baseUrl, callback, "true"); }, message: 'You must enter a reachable domain.', }, (ko.validation.rules as any)["customerValidationServicePath"] = { async: true, validator: function (url: string, baseUrl: string, callback: any) { getRequest(url, baseUrl, callback, "false"); }, message: "This url already exists in our system. Please contact us at hello@ve.com", } ko.validation.registerExtenders(); } function getRequest(url: string, baseUrl: string, callback: any, method: string) { var restClient = new RestClient(); restClient.downloadString(baseUrl.concat(url), (responseText) => { method === "true" ? callback(responseText === "true" ? true : false) : callback(responseText === "true" ? false : true); }); } -
使用规则:
export class CompanySetupVM extends BasePageVM { public websiteUrl: KnockoutObservable<string> = ko.observable(undefined); public isValidating: KnockoutObservable<boolean> = ko.observable(false); public constructor() { this.websiteUrl.extend({ required: { params: true, message: CompanySetupVM.ErrorMessageNullWebsiteUrl }, urlValidationServicePath: CompanySetupVM.DomainValidationPath, customerValidationServicePath: CompanySetupVM.CustomerValidationPath }); this.isValidating = ko.computed(() => this.websiteUrl.isValidating(), this); } } -
在cshtml中:
data-bind="text: currentPage().nextButtonText, css: {'button-overlay': currentPage().isValidating(), 'button': !currentPage().isValidating()}, click: nextAction"
【问题讨论】:
-
您需要出示您的代码。没有人可以仅仅通过非常集中注意力来指出你的错误。
-
我已添加代码
标签: javascript validation knockout.js knockout-validation