Welcome to Community Week 2025! Join us to learn, connect, and be recognized as we celebrate the spirit of Community and the power of AI. Get the details  

Objects returned from g/g2:eval in Jelly Scripting

sn-n00b
Kilo Explorer

OK, So I have the following simple UI Page Jelly XML , but it's returning me some strange results.

This is just a test page to prove something is working.... I have an object in JS that I want to pass out to Jelly. I want to then check for an error property, and if I don't have one iterate over each prop and display the Key and Value of the prop.

The first thing I did was write a simple test Jelly XML to prove that I could have an object in JS, pass it off to Jelly via g2:evaluate (the object will eventually be passed into this page dynamically) and use Jellys j2:if (actually I think it will end up being a choose... but it doesn't matter, I was proving the JEXL works correctly) to check for an error prop and display it, or iterate through the props.

Unfortunately I didn't get to the iterating though the props as I'm having trouble getting the object into a jvar, but I can use a javascript var if I just do a j2:evaluate without a var param.

So what am I missing here... why cannot I pass the var back out from g2:eval using the var prop to populate a jvar_ variable?

Also why are the j2:ifs for $[my_magical_js_var] and $[my_magical_js_var.error] returning false when I know that the object and prop exists. I don't mind using the .hasOwnProperty (and in fact I prefer it) but I still want to understand why the other j2:if statements are not returning as expected!

As you can see in both evaluates I output the object to the log and it all works as I would have expected.

Very confusing!

<?xml version="1.0" encoding="utf-8" ?>

<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">

      <!-- Initial Test to see if an object I manually set works... It doesn't! -->

      <g2:evaluate var="jvar_my_test_object" object="true">

              var thingy = {"error":"this is some random error"}

              /*

                      This outputs the following in the log....

                      ---------------------------------------------

                      Log Object: thingy

                      Object

                      error: string = this is some random error

                      ---------------------------------------------

              */

              JSUtil.logObject(thingy, 'thingy');

              thingy;

      </g2:evaluate>

     

      <!-- This outputs "Error Prop: ::" -->

      <div>Error Prop: :$[jvar_my_test_object.error]:</div>

     

      <!-- This echos "Object: :[object Object]:" -->

      <div>Object: :$[jvar_my_test_object]:</div>

      <!-- This if test doesn't work.... -->

      <j2:if test="$[jvar_my_test_object]">

              First If test worked

      </j2:if>

      <!-- This if test doesn't work.... -->

      <j2:if test="$[jvar_my_test_object.error]">

              First If ERROR test worked

      </j2:if>

      <!-- This if test doesn't work.... -->

      <j2:if test="$[jvar_my_test_object.hasOwnProperty('error')]">

              First If hasOwnProperty test worked

      </j2:if>

      <!-- OK. No try using a JS var -->

      <g2:evaluate>

              var my_magical_js_var = {"error":"this is some random error"}

              /*

                      This outputs the following in the log....

                      ---------------------------------------------

                      Log Object: my_magical_js_var

                      Object

                      error: string = this is some random error

                      ---------------------------------------------

              */

              JSUtil.logObject(my_magical_js_var , 'my_magical_js_var ');

      </g2:evaluate>

     

      <!-- This outputs "Error Prop: :this is some random error:" -->

      <div>Error Prop: :$[my_magical_js_var .error]:</div>

     

      <!-- This echos "Object: :[object Object]:" -->

      <div>Object: :$[my_magical_js_var ]:</div>

      <!-- This if test doesn't work.... -->

      <j2:if test="$[my_magical_js_var]">

              Second If test worked

      </j2:if>

      <!-- This if test doesn't work.... -->

      <j2:if test="$[my_magical_js_var.error]">

              Second If ERROR test worked

      </j2:if>

      <!-- This if test does.... -->

      <j2:if test="$[my_magical_js_var.hasOwnProperty('error')]">

              Second If hasOwnProperty test worked

      </j2:if>

</j:jelly>

This returns the following text.

Error Prop: ::

Object: :[object Object]:

Error Prop: :this is some random error:

Object: :[object Object]:

Second If hasOwnProperty test worked

2 REPLIES 2

srinivasthelu
Tera Guru

Hi James,



The Jelly if condition statement seems to be working differently. If test expects exactly true/false.   I have changed the if conditions like below, and they started working.



<!-- This if test doesn't work.... -->  


      <j2:if test="$[typeof my_magical_js_var == 'object']">  


srini1       </j2:if>  


 


      <!-- This if test doesn't work.... -->  


      <j2:if test="$[my_magical_js_var.error== 'this is some random error']">  


              srini2 Second If ERROR test worked  


      </j2:if>  



Thanks


Srinivas


Hope that helps


Mark this answer as helpful/correct if it does so


Hi Srinivas,



Yes that explains why the if statements are not working. It's a true bool comparison which makes sense.



It still doesn't explain why I cannot get the js object out into a jvar_ variable.



At least it gives me a starting point



Sent from my iPhone