2012-11-12 170 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); 
     } 
    }