javascriptgrailsgstring

How to apply GString interpolation in a js file in Grails


My GSP file (in Grails 3.1.10):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <asset:javascript src="jquery-2.2.0.min.js"/>
    <asset:javascript src="myfile.js"/>
</head>
<body>
    <span id="greeting"></span>

</body>
</html>

myfile.js:

greeting = "${resp}"; // resp is passed from controller
$(document).ready(function(){
    $('#greeting').val(greeting);
});

Well, I believe in that every grails developer knows if I move myfile.js into my GSP file, it will work.

However, I hope to know how to let the standalone js file can handle the inline variable of GString correctly.

Thanks.


Solution

  • Below is the approach I followed when ran into same problem like yours.

    Pass your GString variable to external JS by following way.

    Add the below function in your external JS

    function view_handler_function(greetingValue){
    
        //assign the value to your element
        $('#greeting').val(greetingValue);
    
        .....
        //Your other handling code
    }
    

    Call your function from your view

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <asset:javascript src="jquery-2.2.0.min.js"/>
        <asset:javascript src="myfile.js"/>
    </head>
    <body>
        <span id="greeting"></span>
    
        <script>
            var greeting = "${resp}"; // resp is passed from controller
            $(document).ready(function(){
    
                //call to your external function 
                view_handler_function(greeting);
            });
        </script>
    </body>
    </html>
    

    Note: This may or may not be the exact answer you are looking for but just one way around I follow.