2014-03-18 47 views
0

我試圖根據組合框選擇更改日期/時間控件的顯示格式。我認爲這樣做很簡單。基於組合框選擇的日期控件的計算顯示格式

我正在使用一個js if語句與getComponent而不是datasource.getValue,因爲我認爲它會搶在提交之前的值。我收到一個組件爲空的錯誤。

任何人都可以解釋爲什麼我在這裏得到null,但在與getcomponent computedField值顯示?

if (getComponent('comboBox1').getValue()==0) 
    {'both'} 

else 
    {'date'} 

回答

2

的類型轉換器是網頁加載過程中計算,並且在此期間,不可能與getComponent方法來訪問的部件。此外,以這種方式重新計算轉換器的類型是不可能的。事件如果你使用頁面加載/動態技巧,轉換器的類型將不會重新計算。

但是你可以在局部刷新改變轉換器的類型:

<xp:comboBox id="comboBox1"> 
    <xp:selectItem itemLabel="One" itemValue="1"></xp:selectItem> 
    <xp:selectItem itemLabel="Null" itemValue="0"></xp:selectItem> 
     <xp:eventHandler event="onchange" submit="true" refreshMode="partial" refreshId="inputText1"> 
      <xp:this.action><![CDATA[#{javascript: 
      var cmp:com.ibm.xsp.component.xp.XspInputText = getComponent("inputText1"); 
      var converter:com.ibm.xsp.convert.DateTimeConverter = cmp.getConverter(); 
      var value = getComponent("comboBox1").getValue(); 

      if(value == 0) { 
       converter.setType("both"); 
      }else{ 
       converter.setType("date"); 
      } 
      }]]> 
     </xp:this.action> 
    </xp:eventHandler> 
</xp:comboBox> 

在這個例子中,檢測DateField是inputText1,看起來像這樣:

<xp:inputText id="inputText1"> 
    <xp:this.converter> 
     <xp:convertDateTime type="time" /> 
    </xp:this.converter> 
    <xp:dateTimeHelper /> 
</xp:inputText> 
+0

完美,謝謝說明! –