SharePoint 2013 JSLink OnPostRender не работает после добавления SP.SOD.executeFunc - PullRequest
0 голосов
/ 26 февраля 2019

Я использую JSLink для окрашивания строк в списке SharePoint 2013

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");


}

}  

Мне нужно добавить SP.SOD.executeFunc () для активации _spPageContextInfo .Но когда я добавил SP.SOD.executeFunc (), функция postRenderHandler не вызывалась в соответствии с HighlightFieldCtx.OnPostRender = postRenderHandler .Когда у меня нет SP.SOD.ExecuteFunc () и статической ссылки на мой JS и CSS, мой код и рендеринг полностью работают.Не могли бы вы помочь мне, как сделать правильный код с рабочим _spPageContextInfo ?

1 Ответ

0 голосов
/ 27 февраля 2019

Попробуйте это:

<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>
...