Search code examples
javascriptliferayalloy-ui

Alloy-Script/Javascript in dynamically loaded JSP


I am currently dynamically loading various JSPs using an Ajax call. However, once a JSP is loaded none of the Javascript contained inside is working. I am assuming this is because the Script inside has not been parsed yet.

To that end I found the module "aui-parse-content" which, according to its description, should be able to parse the contained script.

The ParseContent Utility - Parse the content of a Node so that all of the javascript contained in that Node will be executed according to the order that it appears.

However, I can't get it to work. Here is my AUI:Script for reference.

    <portlet:resourceURL var="viewContentURL">
            <portlet:param name="jsp" value="<%= tmp %>"/>
    </portlet:resourceURL>

        <div id="<portlet:namespace />jspcontent"></div>

        <aui:script use="aui-base, aui-io-request,aui-parse-content, aui-node"> 
                var url = '<%= viewContentURL.toString() %>';
                AUI().io.request(
                    url,
                    {
                        on:{ 
                            success: function(){
                                var message = this.get('responseData');
                                //alert(message);
                                AUI().one('#<portlet:namespace />jspcontent').html(message);
                                AUI().one('#<portlet:namespace />jspcontent').plug(AUI().Plugin.ParseContent);
                            },
                            failure: function(){
                                alert("An error occured");
                            }
                        }
                    }

                );  
        </aui:script>

Thank you in advance!

-John

Edit: Since I found a fix a while ago and others might have the same problem this is how I got aui-parse-content working:

    on:{ 
                            success: function(){
                                var message = this.get('responseData');
                                var tmp = A.one('#<portlet:namespace />jspcontent');
                                tmp.html(message);

                                tmp.plug(A.Plugin.ParseContent);
                                tmp.ParseContent.parseContent(message);
                            },
    }

Solution

  • I found a fix a while ago and others might have the same problem this is how I got aui-parse-content working:

    on:{ 
                            success: function(){
                                var message = this.get('responseData');
                                var tmp = A.one('#<portlet:namespace />jspcontent');
                                tmp.html(message);
    
                                tmp.plug(A.Plugin.ParseContent);
                                tmp.ParseContent.parseContent(message);
                            },
    }
    

    I also amended my original post to reflect my findings