我正在尝试为电子邮件地址创建自定义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/。我得到了相同的结果。
知道我缺少什么吗?
答案 0 :(得分: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'
});
});