2013-02-26 49 views
0

我正在使用日期文本框并有几个问题。这是与设计师9,所以它使用道场1.8不是它应该有太大的差异。XPages DateTextBox - 设置约束

设置最短/最短日期

我没有看到在设计器中这样做的方法。在xe:djDateTimeConstraints中没有任何匹配,所以这是我需要通过JavaScript做的事情? 我有一个例子,下面的例子改变了EndDate控件一旦选择了StartDate,但没有看到设置StartDate和BeforeRenderResponse等的方法。

可选日期

http://dojotoolkit.org/reference-guide/1.8/dijit/form/DateTextBox.html “也验证对像最小值,最大值,当周的有效天数等开发商提供的约束”

本周的有效天数 - 我希望将它设置为仅可选择的平日,但没有示例,并且链接不会转到带有dayofweek约束的页面。我应该搜索什么术语?在下面的例子中,我有一个验证器,但我不知道日期文本框是否可以让周末不可选。

这里是我的榜样控制 - 当开始日期设定,它改变结束日期

<xp:label value="Start Date" id="lblStartDate"></xp:label> 
<xe:djDateTextBox id="djDateStart"> 
    <xe:this.constraints> 
     <xe:djDateTimeConstraints datePattern="M/dd/yyyy"></xe:djDateTimeConstraints> 
    </xe:this.constraints> 
    <xp:eventHandler event="onChange" submit="false"> 
     <xe:this.script><![CDATA[ 
     var startDateID = "#{id:djDateStart}"; 
     var endDateID = "#{id:djDateEnd}"; 
     var hiddenEndDateID = "#{id:hiddenEndDate}"; 

    require(["dojo/date/locale"], function(locale){ 
     var x = new Date (dojo.byId(startDateID).value); 
      // Fails if current date is the weekend or empty 
     if(locale.isWeekend(x) || dojo.byId(startDateID).value == "") { 
      dojo.style(hiddenEndDateID, "display", "none"); 
      dojo.byId(endDateID).value = ""; 
      dojo.byId(startDateID).value = ""; 
      dijit.byId(startDateID).displayMessage("dates must be weekdays"); 
     } else { 
      // Set display value and constraint for End Date 
      dojo.byId(endDateID).value = dojo.byId(startDateID).value; 
      dijit.byId(endDateID).constraints.min = arguments[0]; 
      dijit.byId(endDateID).constraints.max = dojo.date.add(arguments[0], "week", 3); 

      // Make End Date and Comment visible. 
      dojo.style(hiddenEndDateID, "display", "inline"); 
     } 
    }) 
    ]]></xe:this.script> 
    </xp:eventHandler> 
</xe:djDateTextBox> 
+0

不知道我可以在设计器中设置最小/最大约束,所以我改为在页面上创建一个脚本块,以便在dojo准备好时设置值。不是最优的,但至少它是有效的。仍然不确定是否有可能限制用户通过用户界面选择像周末一样的周末选择,但我有验证器来警告用户。 – anotherBob 2013-03-13 16:07:17

回答

0

的限制,我想出了一个解决方案是使用范围检查 - 没有约束。因此,在下面的脚本块中,当星期日是星期日/星期六(0,6)并且它不在范围内时,它将返回false。

也许这会帮助别人。

 fyStart = new Date ("#{applicationScope.fyStart}"); 
     fyEnd = new Date ("#{applicationScope.fyEnd}"); 
     calendarEnd = new Date ("#{applicationScope.calendarEnd}"); 

    require(["dojo/ready", "dojo/parser", "dijit/registry", "dijit/Dialog"], function(ready, parser, registry){ 
     ready(function(){ 

      dijit.byId('#{id:djDateStart}').rangeCheck = function(date,constraints) { 
       var day=date.getDay(); 
       return day !==0 && day !== 6 && date >= fyStart && date <= calendarEnd; 
      } 
      dijit.byId('#{id:djDateEnd}').rangeCheck = function(date,constraints) { 
       var day=date.getDay(); 
       return day !==0 && day !== 6 && date >= fyStart && date <= calendarEnd; 
      } 

     }); 
    });