2012-10-01 143 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