#1 2015-09-10 14:09:46

Pascal
Member
Registered: 2015-09-10
Posts: 2

SOLVED - SynSM - Have a Function Return an Object

Hello,

First of all, thank you for mORMot -- I'm not yet super familiar with it, but it seems to be an impressive piece of work. I have so far only contributed to ticket 125fc8d280633be2b8a983b7160f9fba1df114f8, but I hope this will change. ^^

So, I'm using SynSM to run the following dummy JS code:

alert(document.createElement("testNode").nodeName);

I have declared window as being the same as the global object, I have integrated the alert function, I have integrated the document object and integrated the createElement function.

It looks like this (the HtmlDoc object is from the HTMLP library and has the DOM of the loaded webpage):

function TDocumentWrapper.createElement(const This : Variant; const Args : Array of Variant) : Variant;
var
 TempElement : TElement;
 TempObject : TSMObject;
begin
 TempElement := HtmlDoc.createElement(VarToStr(Args[0]));
 if (TempElement <> nil) then
 begin
  JSEnvironmentSender.NewObject(TempObject);
  TempObject.DefineProperty('nodeName', TempElement.nodeName);
  Result := TempObject.AsSMValue.AsJSVal;
 end;
end;

However, alert only returns an empty string. If I call:

ShowMessage(TempObject.Properties['nodeName']);

I get testNode as expected. So I presume that TempObject.AsSMValue.AsJSVal is not the correct way of returning the object. Of course, I made sure that a simple alert("Hello world."); would work -- and it does.

How shall it be done?

Thanks.

Last edited by Pascal (2015-09-12 13:48:42)

Offline

#2 2015-09-12 13:48:27

Pascal
Member
Registered: 2015-09-10
Posts: 2

Re: SOLVED - SynSM - Have a Function Return an Object

This line seems to work:

Result := TempObject.AsSMValue.ToVariant(TempObject.cx);

Offline

Board footer

Powered by FluxBB