2014-04-16 31 views
2

我見過a few articles here試圖綁定計算的字段,但我的首選解決方案; getComponent不適合我。我寧願沒有隱藏的「真實」領域。這是我的。計算的增值稅稅率百分比字段名爲VPxpage getComponent總是返回null,即使變量聲明和初始化時

<xp:text escape="true" id="VP" value="#{FInvoiceDoc.VP}" style="text-align:right"> 
<xp:this.converter> 
    <xp:convertNumber pattern="0.00"></xp:convertNumber> 
</xp:this.converter> 
</xp:text> 

這裏是我設置此字段的值的計算之一;

XSP.getElementById("#{id:VP}").innerHTML = tmp.toFixed(2); 

tmp正確計算,VP在頁面上顯示正確的期望值。

然後在我的querySaveDocument事件,我做了以下

var VP = getComponent("VP").getValue(); 
FInvoiceDoc.replaceItemValue("VP",VP); 

,什麼都存儲爲空值。我甚至在設置VP變量並檢查日誌後,通過執行「Print(VP)」命令來確認VP變量爲空。有一些我錯過了。

+0

爲什麼你使用querySaveDocument代碼已經綁定VP字段? –

回答

4

在頁面提交你沒有得到一個計算的文本字段的值回到服務器,因爲它是隻讀的。

您正在尋找一個解決方案,您可以:

  • 在讀模式顯示文檔的場
  • 在客戶端與CSJS
  • 設置新值這個領域
  • 保存值迴文檔提交的領域

前兩點已經在您的解決方案中工作。

您可以通過添加一個輸入文本字段「VPdoc」來實現第三點,該文本字段綁定到您的文檔字段「VP」並且用style="display:none"隱藏。

<xp:inputText 
    id="VPdoc" 
    value="#{FInvoiceDoc.VP}" 
    style="display:none"> 
    <xp:this.converter> 
     <xp:convertNumber pattern="0.00"></xp:convertNumber> 
    </xp:this.converter> 
</xp:inputText> 

在提交從計算文本字段「VP」的電流值(innerHTML的)複製到輸入文本字段「VPdoc」使用以下CSJS代碼在提交按鈕:

<xp:this.script><![CDATA[ 
    XSP.getElementById("#{id:VPdoc}").value = 
           XSP.getElementById("#{id:VP}").innerHTML 
]]></xp:this.script> 

這樣的值在客戶端設置爲「VP」的字段被保存到文檔。

+0

這個伎倆!事實上,這使我重新考慮了我保留在文檔頂部的所有紅色隱藏字段。你搖滾克努特! – cjames728

0

您不要指定值,而是用一些html代碼替換html表示。因此,你只是打破了「轉換」爲一個愚蠢的div(對不起,不知道如何解釋更好)的元素和種類...

從來沒有搞亂前端:元素綁定到一個您的文檔中的項目。修改該值,並且代表它的元素將代表更改。

和:你不需要在querysavedocument行代碼保存回值...這將是自動完成的,這就是結合(元素的值屬性)是...

+1

我想這是令人沮喪的事情。常規字段可以通過客戶端XSP.getElementByID(「Blah」)進行更新。value = BlahBlah可以正常工作,並且會更新後端文檔,但是對於計算字段,您不得不使用XSP.getElementByID(「Blah 「).innerHTML = BlahBlah不會更新後端。我在用戶編輯文檔的時候避免了後端命令,因爲它們會導致非常糟糕的頁面刷新。 (即使部分刷新也會讓我的眼睛流血。)我喜歡住在前端,因爲至少有一個調試器。 (各種...) – cjames728

+1

請記住,您可以限制部分刷新的目標。例如,如果組合框的值不會影響其他組件的渲染,但組合框的「onChange」可以刷新該組合框,但您仍然希望服務器立即知道其值已更改。在這種情況下,您有一個字段的值依賴於另一個字段。因此,設置事件的刷新目標以僅刷新該字段。 –

+0

此外,如果您的問題是調試,請獲得Mark Leusink的調試工具欄,可在OpenNTF上找到 - http://www.openntf.org/main.nsf/project.xsp?r=project/XPage%20Debug%20Toolbar –

0

也許,代替操縱innerHTML,您使用了

getComponent("VP").setValue(tmp.toFixed(2)); 

這是否行得通?你會設置的組件的價值,然後,我想.....

+0

我不喜歡在用戶完成文檔更新之前,不想使用後端命令設置該值。編輯結果頁面中的後端更新刷新了我真正想要避免的內容。他們是醜陋的罪! – cjames728

+0

@ cjames728在後端更新它不會導致頁面刷新,除非您告訴它刷新。 –