Javascript Alfresco共享客户端同步表单验证
我在注册场景中有一个Alfresco Share客户端表单,我想验证是否使用了所选用户名 我可以以同步方式添加Alfresco表单验证程序吗 到目前为止,我的表格是这样的:Javascript Alfresco共享客户端同步表单验证,javascript,forms,share,alfresco,validation,Javascript,Forms,Share,Alfresco,Validation,我在注册场景中有一个Alfresco Share客户端表单,我想验证是否使用了所选用户名 我可以以同步方式添加Alfresco表单验证程序吗 到目前为止,我的表格是这样的: this.widgets.saveForm = new Alfresco.forms.Form(this.id + "-form"); this.widgets.saveForm.addValidation(Dom.get(this.id + "-username"), this.validateUsername, me,
this.widgets.saveForm = new Alfresco.forms.Form(this.id + "-form");
this.widgets.saveForm.addValidation(Dom.get(this.id + "-username"), this.validateUsername, me, "blur", this.msg("validation-hint.username-taken"));
但是this.validateUsername需要向repo端web服务发出Alfresco.util.Ajax.request,该web服务检查所选用户名的可用性。因此,基本上,当响应出现时,我原来的validateUsername方法已经完成了很长时间,返回false(很可能)
到目前为止,我的进展是禁用submit按钮(这就是我将“me”传递给验证处理程序的原因),并在用户名正常的情况下让成功/失败回调启用它
制作同步验证器的好方法是什么
一个附带的问题是,是否有更好的方法将验证处理程序的范围设置为“this”,而不是传递me(这个方法也有效,只是为了确保我没有错过更好的方法)。这是创建站点表单的一个片段。它也会执行相同的操作,检查短名称是否已经存在,如果已使用,则显示错误
createSiteForm.doBeforeFormSubmit =
{
fn: function()
{
var formEl = Dom.get(this.id + "-form");
formEl.attributes.action.nodeValue = Alfresco.constants.URL_SERVICECONTEXT + "modules/create-site";
this.widgets.okButton.set("disabled", true);
this.widgets.cancelButton.set("disabled", true);
// Site access
var siteVisibility = "PUBLIC";
if (this.widgets.isPublic.checked)
{
if (this.widgets.isModerated.checked)
{
siteVisibility = "MODERATED";
}
}
else
{
siteVisibility = "PRIVATE";
}
this.widgets.siteVisibility.value = siteVisibility;
this.widgets.panel.hide();
this.widgets.feedbackMessage = Alfresco.util.PopupManager.displayMessage(
{
text: Alfresco.util.message("message.creating", this.name),
spanClass: "wait",
displayTime: 0
});
},
obj: null,
scope: this
};
// Submit as an ajax submit (not leave the page), in json format
createSiteForm.setAJAXSubmit(true,
{
successCallback:
{
fn: this.onCreateSiteSuccess,
scope: this
},
failureCallback:
{
fn: this.onCreateSiteFailure,
scope: this
}
});
这是客户端JavaScript文件create-site.js,它在提交之前进行ajax调用。我的解决方案是:
validateUsername: function Reg_validateUsername(el, me) {
var val = this.fieldId.value;
var username = trim(val);
me.widgets.registerButton.set("disabled", true);
Dom.addClass(me.id + "-username-img", "checking");
Dom.removeClass(me.id + "-username-img", "hidden");
Alfresco.util.Ajax.request({
url: "/alfresco/service/slingshot/register/username-available?username=" + username
, method: "GET"
, successCallback: {
fn: me.onUsernameAvailable
, scope: me
}
, failureCallback: {
fn: me.onUsernameTaken
, scope: me
}
});
我就是这样做的。谢谢塔希尔。我已经看过这段代码,但它并不完全适合我。这是在提交之前完成的。我想要的是在输入时间之后,当用户仍在填写其他字段(如电子邮件地址)时,在后台完成此检查。嗨,兹拉杜里克,我知道你想要什么,但我只是展示“Alfresco”是如何做到的。当然,您可以在键入时执行此操作,但是您需要在正在键入的字段上添加一个按键事件。我更喜欢jQuery,您可以轻松地进行查找,而不需要做很多工作。@Zlatko我也有类似的问题,但对我来说仍然不起作用。这是我问题的链接。你能帮我做同样的事吗?@Ranjitsinh不幸的是,你唯一能做的就是异步。让ajax调用使该字段上的表单无效,然后successCallback应将其设置回有效。