Sharepoint 2013 introduced the JSLink. This is very useful to play with forms and views.
My attempt here is to remove some rows from the DispForm. To do so I needed to trigger an action as soon as the fields rendering has been done. After different tries, I finally came up with the PostRender
option.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | function loadExt(e,t){ var s= this ;s.files=e,s.js=[],s.head=document.getElementsByTagName( "head" )[0],s.after=t|| function (){},s.loadStyle= function (e){ var t=document.createElement( "link" );t.rel= "stylesheet" ,t.type= "text/css" ,t.href=e,s.head.appendChild(t)},s.loadScript= function (e){ var t=document.createElement( "script" );t.type= "text/javascript" ,t.src=s.js[e]; var a= function (){++e<s.js.length?s.loadScript(e):s.after()};t.onload= function (){a()},s.head.appendChild(t)}; for ( var a=0;a<s.files.length;a++)/\.js$|\.js\?/.test(s.files[a])&&s.js.push(s.files[a]),/\.css$|\.css\?/.test(s.files[a])&&s.loadStyle(s.files[a]);s.js.length>0?s.loadScript(0):s.after()} // verify when all scripts have been loaded var loadExtLoaded = false ; function checkExt(ctx) { if (loadExtLoaded) { // here you can call a function that is in one of the called script } else { setTimeout( function () { checkExt(ctx) }, 50); } } loadExt([ 'file_you_want_to_load.js' , 'style_you_want_to_load.css' , 'no_cache_file.js?timestamp=' +(Date.now()) ], function () { loadExtLoaded= true ; }); ( function () { function onLoad(ctx) { checkExt(ctx); } // do some actions as soon as the fields are shown var loadAfterForm = { Templates: { OnPostRender: function (ctx) { // only trigger when everything is loaded // --> ctx.ListData.Items[0] all the fields if (ctx.ListSchema.Field[0].Name === "Attachments" ) { onLoad(ctx) } } } } SPClientTemplates.TemplateManager.RegisterTemplateOverrides(loadAfterForm); })(); |