Do you want to call javascript code from rui, or have rui code be called from javascript?
Both are possible with externaltypes. Below is an example for a document-keydown-eventhandler:
EGL start function in rui:
BrowserLib.addDocumentKeyDownEventHandler(Doc_Keydown, uiAlles);
Egl rui Doc_Keydown function:
private function Doc_Keydown(e Event in) case (currentScherm) when (SCHERM_BASE) case (e.ch) when(KeyLib.KEY_F1) dlgFuncties.showDialog(); when(KeyLib.KEY_F3) sectieZoeken.expand(); artikelzoeker.setFocus(); end when (SCHERM_STOCKPLANNING, SCHERM_STOCKPLANNINGVOORSTEL) case (e.ch) when (KeyLib.KEY_ESC) displayScherm(SCHERM_BASE, schermBasis); end end end
Library BrowserLib:
library BrowserLib type BasicLibrary private browser _BrowserFunctions { }; function addDocumentKeyDownEventHandler(eventHandler EventHandler in, targetWidget Widget in) browser.addDocumentKeyDownEventHandler(eventHandler, targetWidget); endend
Externaltype:
private externalType _BrowserFunctions extends Widget type JavaScriptObject { relativePath = "customJavaScript/widgets", javaScriptName = "BrowserFuncts" } function addDocumentKeyDownEventHandler(event EventHandler in, targetWidget Widget in);end
Javascript:
egl.defineClass( 'customJavaScript.widgets', 'BrowserFuncts', { "eze$$initializeDOMElement": function(){ }, "constructor": function(){ }, "addDocumentKeyDownEventHandler": function(eventHandler, targetElement){ addEventHandler(document, 'keydown', function(e) { var keyCode = 'which' in e ? e.which : e.keyCode; if(keyCode >= 112 && keyCode <= 123) e.preventDefault(); e.ch = keyCode; eventHandler(e); }, targetElement); }, });
Bram_Callewaert