Custom Events


On top of the events detailed in Life Cycle of jsRO Objects, events can be created in the application that are defined by the programmer and when fired will be propagated from the application to the browser.




The following example shows how to add a personalized event to an object and how this can be handled from Javascript. In this case we'll expose, as a JSON, the mouse coordinates.


Definition and use of an event in Delphi:


 // Creates the remote object

FRo := TJSObject.Create('ro');

 // Adds the event


   .AddArgument('coords', JSDT_JSON);    // Adds the mouse position as JSON



procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState;

                                X, Y: Integer);



     .ArgumentAsJSON('coords', '{"x": ' + X + ', "y": ' + Y + '}')




Definition and use of an event in .Net:


 // Creates the remote object

ro = new JSObject("ro");

 // Adds the event


    .AddArgument("coords", IJSDataType.JSDT_JSON) // Adds the mouse position as JSON





private void Form1_MouseMove(object sender, MouseEventArgs e)




            "{ \"x\": " + MousePosition.X + ", \"y\": " + MousePosition.Y + "}")




Definition and use of an event in C#:


// Creates the remote object

ro = new JSObject("ro");


// Adds the eventro.Events.Add("mousePositionChanged")  

.AddArgument("coords", IJSDataType.JSDT_JSON) //the mouse position as JSON





private void Form1_MouseMove(object sender, MouseEventArgs e)

{   ro.Events["mousePositionChanged"]

     .ArgumentAsJSON("coords""{ \"x\": " + MousePosition.X + ", \"y\": " + MousePosition.Y + "}")




To handle the event in Javascript, please note that the Javascript syntax for the personalized events differs slightly from the syntax for the model events, since it's declared directly associated to the name of the jsRO (without the "model"):


jsro.on('ro', 'mousePositionChanged', function (coords) {

      console.log('mouse moved to [' + coords.x + ', ' + coords.y + ']');