我创建了一个自定义验证器,用于检查数据库上是否使用了用户名。验证的整个过程有效。不工作的是结果。
function createExistingUsernameValidator() {
var name = 'existingUsernameValidator';
var ctx = { messageTemplate: 'Questa partita I.V.A. o codice fiscale sono già stati inseriti.', displayName: "Partita IVA o Codice Fiscale" };
var val = new Validator(name, valFunction, ctx);
return val;
function valFunction(value, context) {
var result = ko.observable(true);
require('services/datacontext').getIsUserByUsername(value, result)
.then(function () {
debugger;
return !result();
});
}
}
承诺有效:我知道是因为它到达了调试器行并且retunrnig值是正确的。
但是验证器总是评估为假,因为当验证器被调用时我没有返回任何东西。换句话说:它不会等待承诺。
是我的坏 javascript 还是别的什么?
欢迎任何帮助。
谢谢!
回答后编辑
我找到了一个涉及淘汰赛验证(非常有用的脚本)的解决方案。
function createIsExistingUserKoValidation() {
ko.validation.rules['existingUsername'] = {
async: true,
validator: function (val, params, callback) {
if (val) {
var result = ko.observable();
require('services/datacontext').getIsUserByUsername(val, result)
.then(function () {
callback(!result());
});
}
},
message: ' Existing username.'
};
ko.validation.registerExtenders();
}
在实体创建中:
var createDitta = function () {
var ditta = manager.createEntity(entityNames.ditta,
{
id: newGuid(),
legaleRappresentante: createPersona(),
isAttiva: true
});
ditta.pivaCodFiscale.extend({ existingUsername: { message: ' Existing username.', params: true } });
ditta.pivaCodFiscale.isValidating(false);
return ditta;
};
ditta.pivaCodFiscale.isValidating(false); 这是必需的,因为 isValidating 是用 true 初始化的。