XPages DateTextBox - 设置约束

时间:2013-02-26 20:14:52

标签: javascript dojo xpages

我正在处理日期文本框并提出了一些问题。这是设计师9,所以它使用dojo 1.8并不是它应该产生太多的差异。

设置最短/最长日期

我没有在设计师中看到这样做的方法。 xe:djDateTimeConstraints中没有匹配的东西,所以这是我需要通过javascript做的事情吗? 我在下面有一个例子,一旦选择了StartDate就更改了EndDate控件,但是没有看到设置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>

1 个答案:

答案 0 :(得分:0)

我想出的解决方案是使用Range检查 - 而不是约束。所以在下面的脚本块中,当天是星期日/星期六(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;
            }

        });
    });