SERIE: IL CLIENT SIDE RENDERING DI SHAREPOINT 2013
- Introduzione al Client Side Rendering di SharePoint 2013
- Ridefinire la visualizzazione di un campo tramite il Client Side Rendering - Parte 1
- Utilizzare i namespace Javascript nella definizione di template per il Client Side Rendering (questo post)
- Ridefinire la visualizzazione di un campo tramite il Client Side Rendering - Parte 2
- Ridefinire la modalità di inserimento di valori in un campo tramite il Client Side Rendering
- Gestire la modalità "Quick edit" all'interno di un display template
- Come applicare un plugin JQuery su un display template
- Aggiungere un tooltip per aiutare l'inserimento di valori tramite il Client Side Rendering
- Specificare più file Javascript all’interno della proprietà JSLink
- Utilizzare file CSS nei display template del Client Side Rendering
- Modificare il rendering delle righe di una lista tramite il Client Side Rendering
- Modificare l'intera visualizzazione di una lista tramite il Client Side Rendering
- Applicare il plugin MixItUp su liste SharePoint 2013 tramite il Client Side Rendering
- Provisioning di display template
- Ridefinire il rendering di un custom field tramite il Client Side Rendering
Come avrete visto quindi, possiamo ridefinire la UI di campi SharePoint tramite delle funzioni Javascript e un particolare oggetto (il nostro template) che viene iniettato in pagina dal nuovo sistema di rendering introdotto nel prodotto di collaborazione Microsoft.
Durante la definizione di queste funzioni di rendering, vi consiglio vivamente di utilizzare i namespace Javascript.
Abbiamo detto che la visualizzazione di un campo può essere ridefinita assegnando una nuova funzione alla proprietà "View" del campo che stiamo ridefinendo. Nel primo esempio abbiamo utilizzato una funzione Javascript in-line.
(function () { var ctx = {}; ctx.Templates = {}; ctx.Templates.Fields = { 'PercentComplete': { 'View': function() { return 'Hello from <b>CSR</b>!'; }, 'DisplayForm': function() { return 'Hello from <b>CSR!</b>'; }, 'EditForm': function() { return 'Hello from <b>CSR!</b>'; }, 'NewForm': function() { return 'Hello from <b>CSR!</b>'; }, } }; SPClientTemplates.TemplateManager.RegisterTemplateOverrides(ctx); })();
Si ha un aumento delle performance se, al posto di utilizzare una funzione in-line, si salva la funzione in una variabile globale e la si assegna alla proprietà "View" del template.
function PercentCompleteCustomRendering() { return 'Hello from <b>CSR</b>!'; }; (function () { var ctx = {}; ctx.Templates = {}; ctx.Templates.Fields = { 'PercentComplete': { 'View': PercentCompleteCustomRendering, 'DisplayForm': PercentCompleteCustomRendering, 'EditForm': PercentCompleteCustomRendering, 'NewForm': PercentCompleteCustomRendering, } }; SPClientTemplates.TemplateManager.RegisterTemplateOverrides(ctx); })();
E' per questo che vi consiglio di crearvi sempre i vostri namespace personalizzati. In questo modo potete essere ancora più sicuri di evitare conflitti di nomi.
I namespace in Javascript non sono nient’altro che degli oggetti dentro altri oggetti.
Ecco quindi il nostro script ottimizzato al meglio:
window.D4S = window.D4S || {}; window.D4S.SP2013 = window.D4S.SP2013 || {}; D4S.SP2013.PercentCompleteCustomRendering = function() { return 'Hello from <b>CSR</b>!'; }; (function () { var ctx = {}; ctx.Templates = {}; ctx.Templates.Fields = { 'PercentComplete': { 'View': PercentCompleteCustomRendering, 'DisplayForm': PercentCompleteCustomRendering, 'EditForm': PercentCompleteCustomRendering, 'NewForm': PercentCompleteCustomRendering, } }; ctx.ListTemplateType = undefined; ctx.BaseViewID = undefined; SPClientTemplates.TemplateManager.RegisterTemplateOverrides(ctx); })();
Spero vi sia utile.