0

我正在使用日期文本框并且有几个问题。这是设计师 9,所以它使用 dojo 1.8 并不是说​​它应该有太大的不同。

设置最小/最大日期

我没有在设计师中看到这样做的方法。xe:djDateTimeConstraints 中没有任何匹配的内容,所以这是我需要通过 javascript 执行的操作吗?我在下面有一个示例,一旦选择了 StartDate,就会更改 EndDate 控件,但没有看到设置 StartDate 的方法,而不是 beforeRenderResponse 或类似的方法。

可选日期

http://dojotoolkit.org/reference-guide/1.8/dijit/form/DateTextBox.html “还针对开发人员提供的约束进行验证,例如最小值、最大值、一周中的有效天数等。”

一周中的有效日期 - 我很乐意将其设置为可选择的工作日,但没有示例,并且链接不会转到具有星期限制的页面。我应该搜索什么术语?在下面的示例中,我有一个验证器,但我不知道日期文本框是否可以让周末无法选择。

这是我的示例控件-设置开始日期后,它会更改结束日期的约束

<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>
4

1 回答 1

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;
            }

        });
    });
于 2013-03-18T18:28:50.760 回答