SharePoint 2013 JSLink OnPostRender not working after adding SP.SOD.executeFunc

843 Views Asked by At

I use JSLink to color rows in a SharePoint 2013 list

ExecuteOrDelayUntilBodyLoaded(function () {
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function () {

        RegisterModuleInit(_spPageContextInfo.siteServerRelativeUrl + "/SiteAssets/jsLink.js", Highlight); 
        Highlight();
    }
  });

});
function Highlight() {   

var HighlightFieldCtx = {};
HighlightFieldCtx.Templates = {};
HighlightFieldCtx.Templates.Fields = {};  

HighlightFieldCtx.OnPostRender =  postRenderHandler;     

 SPClientTemplates.TemplateManager.RegisterTemplateOverrides(HighlightFieldCtx);  
}


function postRenderHandler(ctx)
{

 var rows = ctx.ListData.Row;


 for (var i=0;i<rows.length;i++)
{
    // do stuff
    row.classList.add("Color");


}

}  

I need add SP.SOD.executeFunc() for activate _spPageContextInfo. But when I added SP.SOD.executeFunc(), function postRenderHandler not called in line with HighlightFieldCtx.OnPostRender = postRenderHandler. When I dont have SP.SOD.ExecuteFunc() and static link on my JS and CSS, my code and rendering fully working. Can you please help me, how to make proper code with working _spPageContextInfo?

1

There are 1 best solutions below

0
Lee On

Try this:

<script type="text/javascript">

            SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function () {
                //alert(_spPageContextInfo.siteServerRelativeUrl);
                RegisterModuleInit(_spPageContextInfo.siteServerRelativeUrl + "/SiteAssets/jsLink.js", Highlight);
                Highlight();
            });

        function Highlight() {

            var HighlightFieldCtx = {};
            HighlightFieldCtx.Templates = {};
            HighlightFieldCtx.Templates.Fields = {};
            HighlightFieldCtx.OnPostRender =  postRenderHandler;
            SPClientTemplates.TemplateManager.RegisterTemplateOverrides(HighlightFieldCtx);
        }

        function postRenderHandler(ctx)
        {
            var rows = ctx.ListData.Row;
            alert('postRenderHandler');
        }
    </script>