0

日付のテキスト ボックスを使用していますが、いくつか質問がありました。これはデザイナー 9 の場合であるため、dojo 1.8 を使用してもそれほど大きな違いはありません。

最小/最大日付の設定

デザイナーでこれを行う方法がわかりません。xe:djDateTimeConstraints に一致するものは何もないので、これは javascript で行う必要がありますか? StartDate が選択されると EndDate コントロールを変更する例を以下に示しますが、BeforeRenderResponse など以外に StartDate を設定する方法はありませんでした。

選べる日程

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 に答える