0

我正在尝试为电子邮件地址创建自定义 ValidationTextBox 小部件。我们的系统中有许多区域使用电子邮件地址输入,我想创建一个具有默认正则表达式、无效消息等的小部件。问题是有两个属性:占位符和 maxlength 似乎没有得到添加到我的扩展课程中。我的代码如下:

define([
    "dojo/_base/declare", // declare
    "dijit/form/ValidationTextBox",
    "dojo/_base/lang"
], 
function(declare, ValidationTextBox, lang){  

    return lang.mixin(ValidationTextBox, {
    invalidMessage: "Please enter a valid email address.",
    missingMessage: "Please enter a valid email address.",
    regExp : "[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$",
    maxlength : 50,
    placeholder : 'Your Email'
    });
});

如果我在我的页面上使用它,无效消息可以正常工作,但是在我使用它的任何地方,我都看不到占位符,也没有应用 maxlength。除了 lang.mixin 方法之外,我还尝试使用此处说明的声明方法: http ://www.sitepen.com/blog/2010/07/01/creating-and-enhancing-dojo-classes/ . 我得到相同的结果。

知道我错过了什么吗?

4

1 回答 1

0

请参阅您在http://jsfiddle.net/phusick/eLkwb/中描述的两个选项

使用dojo/_base/lang::extend代替mixin

lang.extend(ValidationTextBox, {
    invalidMessage: "Please enter a valid email address.",
    missingMessage: "Please enter a valid email address.",
    pattern: "[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$",
    required: true,
    maxLength: 3,
    placeHolder : 'Your Email'
});

另请注意:

  • regExp已弃用,请pattern改用
  • 属性区分大小写:所以placeHolder,maxLength
  • 确保dojo/parser::parse()在扩展发生之后(用于标记实例化)
  • maxLength由于某种原因不起作用(请参阅declare下面的解决方法)

通过子类化实现相同的功能:

define([
    "dojo/_base/declare",
    "dijit/form/ValidationTextBox"
], function(
    declare,          
    ValidationTextBox
) {

    return declare([ValidationTextBox], {
        postCreate: function() {
            // a workaround to make maxLength working
            this.inherited(arguments);            
            this.set("maxLength", this.maxLength);
        },            
        invalidMessage: "Please enter a valid email address.",
        missingMessage: "Please enter a valid email address.",
        pattern: "[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$",
        required: true,
        maxLength: 3,
        placeHolder : 'Your Email'
    });
});
于 2012-10-01T17:39:03.597 回答