Execute qualquer outro javascript depois que os modelos de exibição renderizarem o conteúdo
-
09-12-2019 - |
Pergunta
Esta é a questão:
- Eu crio um contentbysearchwebpart, especificado com meus modelos de exibição personalizados. '
- Quero executar algum outro código JavaScript, depois que os modelos de exibição renderizaram o conteúdo
Em seguida, registro meu arquivo javascript personalizado no modelo de exibição.
$includeScript(this.url, "~sitecollection/_catalogs/masterpage/Display Templates/Slider.js")'
O problema é que meu código do arquivo Slider.js executa antes O código JavaScript 'modelos de exibição' faz.
Alguém pode me fornecer uma maneira de executar meu código Slider.js depois Os modelos de exibição renderizaram o conteúdo do ContentBysearchWebPart (CSWP)?
Solução
:) meu problema está resolvido.
Eu fiz o seguinte:
Registrou o arquivo JS personalizado em Control_YourTemplatename.html File (como Control_banner).
$includeScript(this.url, "~sitecollection/_catalogs/masterpage/Display Templates/HWScripts/Banner.js");
Adicionado essas três linhas no primeiro Div após a etiqueta corporal, no arquivo yourtemplatename.html (como banner.html).
<!--#_ ctx.OnPostRender = []; ctx.OnPostRender.push(function(){ CustomMethodWhichIsIncludedInTheCustomJSFile(); }); _#-->
Mas uma solução melhor é fornecida abaixo:
Você pode pular a definição OnPostRender
você mesmo.Os modelos de exibição CBS têm esta função integrada:
<!--#_
AddPostRenderCallback(ctx, function(){
alert(ctx.Title + "finished rendering!");
});
_#-->
Há também AddPreRenderCallback(ctx, function(){});
Outras dicas
Você pode adicionar uma linha de código após incluir o script,
ExecuteOrDelayUntilScriptLoaded( function() { <your custom function name>; }, 'name of display template ');
por exemplo:
ExecuteOrDelayUntilScriptLoaded( function() { console.dir( SP.Res ); }, 'sp.js');