2012-11-12 125 views
1

我正在嘗試將Drools-Guvnor獨立編輯器集成到我的spring-webflow-jsf-richfaces應用程序中。 我在iframe中顯示guvnor編輯器(在richfaces-modalpanel內)。 按照文檔的Guvnor公開一個JavaScript對象與回調函數一起父應用程序進行通信Iframe中定義的Javascript回調函數

var guvnorEditorObject = { 
    getDRL: function (callbackFunction), 
    getBRL: function (callbackFunction), 
    registerAfterSaveAndCloseButtonCallbackFunction: function (callbackFunction), 
    registerAfterCancelButtonCallbackFunction: function (callbackFunction), 
    getAssetsUUIDs: function() 
} 

現在的問題是如何註冊在我的JSF頁面這些回調函數? 例如,如果用戶單擊關閉按鈕,我想關閉模式面板窗口。 示例代碼對我來說真的很有幫助。

回答

1

我已經設法通過使用javascript setTimeout函數來解決此問題。

根本問題是guvnorEditorObject是動態創建的,因此不可用於iframe的立即加載。

這裏是在加載iframe時調用的代碼。

 function register() { 
     var guvnorEditorObject = window.document.getElementById('myIframe').contentWindow.guvnorEditorObject; 
     if(guvnorEditorObject){ 
      //guvnorEditorObject.getDRL(function(drl){alert('drl: '+drl);}) 
      //guvnorEditorObject.getBRL(function(brl){alert('brl: '+brl);}) 
      guvnorEditorObject.registerAfterSaveAndCloseButtonCallbackFunction(function(){guvnorEditorObject.getDRL(function(drl){alert('drl: '+drl);window.close();})}); 
      guvnorEditorObject.registerAfterCancelButtonCallbackFunction(function(){alert('Cancel button clicked');});    
      //alert(guvnorEditorObject.getAssetsUUIDs());  
     }else{ 
      setTimeout(register,250); 
     } 
    }