对Dijit DateTextBox的约束[一周中的有效日期]

时间:2009-05-18 22:00:32

标签: javascript constraints widget dojo

关于Dijit.Form.DateTextBox的快速提问

http://docs.dojocampus.org/dijit/form/DateTextBox

此页面包含以下内容:“还会针对开发人员提供的约束进行验证,例如最小值,最大值,一周中的有效天数等。”

我似乎无法找到允许我在一周中提供约束的文档。例如,我需要一个DateTextBox,它只允许用户选择星期日发生的日期。

我很感激任何帮助。谢谢!

3 个答案:

答案 0 :(得分:4)

我仔细研究了这个的源代码,我认为手册可能会误导你一点 - 使用对象的约束无法做到这一点。他们的用户论坛中的以下引用似乎支持了我的发现:

  

DateTextBox不允许您自定义   isDisabledDate此时此刻。它只是   让你设置最小/最大。你会   可能要补丁或子类   DateTextBox提供您自己的   isDisabledDate实现和   验证期间检查。

您可以在http://dojotoolkit.org/forum/dijit-dijit-0-9/dijit-support/datetextbox-mondays-only-selectable#comment-19508看到DateTextBox的这种子类的示例。

如果你的工作太多,DateTextBox会从dijit.form.ValidationTextBox继续下去,所以我们可以使用这个小部件的regExpGen创建一个验证器 - 它不会阻止我们选择无效的日期,但它会导致dijit将窗口小部件标记为无效,并为用户提供“输入的值无效”。

dijit.byId('toDate').regExpGen = function() { 
  if (dojo.date.locale.format(this.value, {datePattern: "E", selector: "date"}) == 6)
    return ".*";
  return "0";
}

答案 1 :(得分:2)

碰巧,isDisabledDate内的Calendar对象上的DateTextBox功能只会调用rangeCheck本身的DateTextBox。因此,出于您的目的,这将起作用:

dijit.byId('toDate').rangeCheck = function(date,constraints) {
  var day=date.getDay();
  return day===0;
}

如果你还想要最小/最大的东西,你必须重新添加约束逻辑,但这解决了所述的问题,并且它很短。

答案 2 :(得分:1)

我希望很快得到的一项功能

http://bugs.dojotoolkit.org/ticket/4765