2013-02-26 50 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; 
      } 

     }); 
    });