2012-10-01 94 views
0

我正在尝试为电子邮件地址创建自定义ValidationTextBox小部件。我们的系统中有很多地方使用电子邮件地址输入,并且我想创建一个具有默认正则表达式,无效消息等的小部件。问题是存在两个属性:placeholder和maxlength,似乎没有获得添加到我的扩展类。我的代码如下:无法为特定属性创建Dojo自定义小部件

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._%-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$", 
    maxlength : 50, 
    placeholder : 'Your Email' 
    }); 
}); 

如果我用这个我的网页上,无效的消息做工精细,但在任何地方我用这个,我没有看到一个占位符,也不是应用了最大长度。除lang.mixin方法之外,我还尝试使用这里阐述的声明方法:http://www.sitepen.com/blog/2010/07/01/creating-and-enhancing-dojo-classes/。我得到相同的结果。

任何想法我失踪?

回答

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._%-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$", 
    required: true, 
    maxLength: 3, 
    placeHolder : 'Your Email' 
}); 

同时请注意:

  • regExp已过时,使用pattern代替
  • 属性是case sensiti五个:所以placeHoldermaxLength
  • 确保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._%-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$", 
     required: true, 
     maxLength: 3, 
     placeHolder : 'Your Email' 
    }); 
}); 
+0

这很好,谢谢。关于区分大小写,我们实际上在应用程序中有很多地方使用'占位符'和'maxlength',它似乎工作正常。另外,如果您使用placeHolder,我会在斜体字中看到字体,当它在我们的应用程序中的其他任何地方都没有被斜体显示时。 – sma