Exécutez tout autre JavaScript après que les modèles d'affichage ont rendu le contenu
-
09-12-2019 - |
Question
C'est le problème:
- Je crée un contentbySearchWebPart, spécifié avec mon affichage personnalisé modèles. '
- Je veux exécuter un autre code JavaScript, après l'affichage Les modèles ont rendu le contenu
-
i Ensuite, j'inscris mon fichier JavaScript personnalisé dans le modèle d'affichage.
$includeScript(this.url, "~sitecollection/_catalogs/masterpage/Display Templates/Slider.js")'
Le problème est que mon code de fichier slider.js
exécute avant l'affichage " Le code JavaScript des modèles fait. Quelqu'un peut-il me fournir un moyen d'exécuter mon code Slider.js après le Les modèles d'affichage ont rendu le contenu de ContentBySearchWebPart (CSWP)?
La solution
:) my issue is solved.
I did following:
Registered the custom JS file in Control_YourTemplateName.html file(like Control_Banner).
$includeScript(this.url, "~sitecollection/_catalogs/masterpage/Display Templates/HWScripts/Banner.js");
Added these three lines under the first div after body tag, in YourTemplateName.html (like Banner.html) file.
<!--#_ ctx.OnPostRender = []; ctx.OnPostRender.push(function(){ CustomMethodWhichIsIncludedInTheCustomJSFile(); }); _#-->
But a better solution is provided below:
You can skip defining OnPostRender
yourself. CBS Display Templates have this function baked in:
<!--#_
AddPostRenderCallback(ctx, function(){
alert(ctx.Title + "finished rendering!");
});
_#-->
There is also AddPreRenderCallback(ctx, function(){});
Autres conseils
Vous pouvez ajouter une ligne de code après inclure le script,
ExecuteOrDelayUntilScriptLoaded( function() { <your custom function name>; }, 'name of display template ');
Par exemple:
ExecuteOrDelayUntilScriptLoaded( function() { console.dir( SP.Res ); }, 'sp.js');