Dojo Dijit:为什么attr(“required”,true)无法设置样式“dijitRequired”?或是否有另一个类别表明需要Dijit?

时间:2009-08-10 15:48:13

标签: dojo

据我判断,CSS-Rule“dijitRequired”用于标记所需的输入字段。然而,当我将“required”-Attribute应用于dijit时,未设置此样式,例如日期dijit:

Dijit的构建如下:

<input dojoType="dijit.form.DateTextBox" class="l" id="datumsTestID" name="datumsTest"  tabindex="5" value="2009-01-01" />

使用以下Javscript代码

设置Attribute
dijit.byId('datumsTestID').attr('required', true)

我做错了什么,或者“dijitRequired”的样式不打算像我假设的那样使用?

出于我的目的,我修补了ValidationTextBox.js来设置/取消设置类,但是有更清晰(意思是:更正确)的方法来设置类,还是可以使用其他属性设置必填字段?

ValidationTextBox.js,Dojo 1.3,Line 116

_setRequiredAttr:function(_12){
    this.required=_12;
    if (_12) dojo.addClass(this.domNode, "dijitRequired"); 
    else dojo.removeClass(this.domNode, "dijitRequired");
    dijit.setWaiState(this.focusNode,"required",_12);
    this._refreshState();
} 

2 个答案:

答案 0 :(得分:1)

嗯,我在ValidationTextBox.js或其他任何地方都没有看到该代码。我在1.3中的_setRequiredAttr()是:

_setRequiredAttr: function(/*Boolean*/ value){
this.required = value;
dijit.setWaiState(this.focusNode,"required", value);
this._refreshState();
}

实际上我根本没有看到对dijitRequired的任何引用,也许这是你添加到本地副本的东西?

答案 1 :(得分:0)

设置 dijitRequired 是不够的。 dijit.form.DateTextBox 有自己的内部状态。即使设置了必需属性,此小组件仅在模糊时显示错误。您可以使用这样的子类禁用此机制:

dojo.provide("my.DateTextBox");
dojo.require("dijit.form.DateTextBox");

dojo.declare("my.DateTextBox", dijit.form.DateTextBox, {
  _setRequiredAttr: function(required){
    this._hasBeenBlurred = true;
    this.inherited(arguments);
  }
});