Javascript 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,

我在注册场景中有一个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, "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调用。

我的解决方案是:

  • 向表单中添加自定义验证,并将“var me=this”传递给validator函数以获取范围

    this.widgets.saveForm.addValidation(Dom.get(this.id+“-username”),this.validateUsernameme,“blur”,this.msg(“获取验证提示.用户名”)

  • 添加一个验证处理程序函数,该函数将。禁用submit按钮并将“checking”CSS类设置为适当的形式,以便用户获得反馈。代码剪报:

    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
        }
    });
    
  • 编写一个可用的后端webscript用户名。获取只有在用户名是免费的(并且是有效的,即使我有另一个验证程序)时才会返回成功

  • onUsernameAvailable将再次将submit按钮设置为enabled,并再次运行验证(由于其他字段),并将CSS类更改为“valid”

  • onUserNameTake将CSS类设置为“take”


  • 我就是这样做的。

    谢谢塔希尔。我已经看过这段代码,但它并不完全适合我。这是在提交之前完成的。我想要的是在输入时间之后,当用户仍在填写其他字段(如电子邮件地址)时,在后台完成此检查。嗨,兹拉杜里克,我知道你想要什么,但我只是展示“Alfresco”是如何做到的。当然,您可以在键入时执行此操作,但是您需要在正在键入的字段上添加一个按键事件。我更喜欢jQuery,您可以轻松地进行查找,而不需要做很多工作。@Zlatko我也有类似的问题,但对我来说仍然不起作用。这是我问题的链接。你能帮我做同样的事吗?@Ranjitsinh不幸的是,你唯一能做的就是异步。让ajax调用使该字段上的表单无效,然后successCallback应将其设置回有效。