2013-08-23 17 views
0

我正在使用<xpScriptBlock>來存儲加載ExtJS網格的兩個相當長的客戶端功能的內容。我可以使用客戶端javascript調用函數就好了。view.postscript()允許你調用加載爲輸出腳本的函數嗎?

我發現我需要根據下劃線文檔中的條件顯示不同的網格。爲了引用後端,我將代碼移動到了服務器端,然後嘗試使用view.postScript調用網格。這不起作用,是我的問題的基礎。

這種方法甚至有可能嗎?我不希望把所有的代碼放入事件中。這些功能非常長,並且更好地保存在腳本塊中以提高可讀性和可維護性。這些函數肯定會加載到客戶端中,因爲我可以使用Firebug控制檯手動加載它們。也許我錯過了一些簡單的東西,所以我想在改變我的方法之前先問一下。

var typePO = document1.getItemValueString("typePO"); 
if(typePO == "AFS"){ 
    view.postScript("loadGridAFS();") 
} else { 
    view.postScript("loadGridOther();") 
} 

此代碼位於面板的serverside onClientLoad事件中。我曾嘗試添加「返回」關鍵字,但沒有任何區別。

更新:我甚至不能獲取使用view.postscript()工作的簡單警報。此方法僅適用於SSJS中的某些類型的事件嗎?

+0

你能定義「不起作用」嗎?瀏覽器控制檯中顯示錯誤嗎?或者什麼都沒有發生?還是它運行,但某些行爲與預期不同? –

+0

當然Tim,網格應該在網頁上沒有顯示。 Firebug報告沒有錯誤。這就像代碼甚至不在那裏。 –

+0

我將代碼從面板事件移動到xpage afterPageLoad事件,它的工作原理非常完美。 –

回答

1

經過一些使用簡單警報的實驗後,我可以說view.postScript()不能在任何地方工作。

對於測試,我將相同的代碼放在xpage的六個事件中。下面是我使用的代碼示例:view.postScript(「alert('onClientLoad');」);我只是改變了消息以匹配事件。

下面是結果:

  1. onClientLoad =什麼
  2. beforePageLoad = XSP錯誤
  3. afterPageLoad = WORKS!
  4. afterRestoreView = nothing
  5. beforeRenderResponse = WORKS!
  6. afterRenderResponse =什麼

我還沒有嘗試過每一個可用的事件在那裏,但這裏的底線是,你不應該在view.postscript()計數在各處都起作用。如果它什麼都不做,那麼在詢問您嘗試運行的客戶端JavaScript代碼之前,先嚐試一個簡單的警報,以查看事件是否支持view.postscript。

+0

當您考慮到生命週期的render_response階段將標記發送給瀏覽器時,有意義的是,任何旨在影響該標記的代碼在'afterRenderResponse'期間運行時都不會產生任何影響:實在太遲了。 'beforePageLoad'太早了,因爲組件樹還不存在。不知道爲什麼它在其他事件中不起作用,但可能出於類似的原因。 –