Obnova snippetů s JS prvky

- Landsman
 - Člen | 152
 
Ahoj,
používám kdyby replicator a když překreslím snippet, kde je třeba ckeditor, select2 a podobné prvky, které renderuje javascript, tak jsou samozřejmě bez něj.
Jak nejlépe překreslovat tak, aby se mi i tyto prvky v obsahu znovu zinicializovali?
Javascript řeším v zápatí stránky – zabalit to také do snippetu a
překreslovat i ten?
Když jsem to tak zkusil, tak křičí nette ajax:
nette.min.js:1 Uncaught Cannot initialize nette-ajax twice.
Jak to řešíte vy?
díky
Editoval Landsman (8. 9. 2016 15:19)

- jiri.pudil
 - Nette Blogger | 1034
 
Zpravidla přes extension a ideálně navěsit se přímo na snippets, jako to dělá např. extension pro nette/forms

- Jan Mikeš
 - Člen | 771
 
Řeším to podobně jako @GEpic:
<script>
$(function(){
	$.nette.ext("initOnAjax", {
		success: function (payload) {
			if (!payload.redirect) {
				jsInit();
			}
		}
	});
	jsInit();
});
function jsInit() {
 // ckeditor
 // fancybox
 // ...
}
</script>
Věci jako click handlery atd, píši tak, aby fungovaly i po ajaxu:
<script>
	$("body").on("click", "a.mySelector", function(e){ ... });
</script>
					Editoval Lexi (8. 9. 2016 17:30)

- GEpic
 - Člen | 566
 
Lexi napsal(a):
Řeším to podobně jako @GEpic:
<script> $(function(){ $.nette.ext("initOnAjax", { success: function (payload) { if (!payload.redirect) { jsInit(); } } }); jsInit(); }); function jsInit() { // ckeditor // fancybox // ... } </script>Věci jako click handlery atd, píši tak, aby fungovaly i po ajaxu:
<script> $("body").on("click", "a.mySelector", function(e){ ... }); </script>
Jj přesně tak, některé eventy jdou bindnout na ‚body‘, či-li fungují i po překreslení snippetu, např. tooltipy, popovery a podobně.

- Karlito
 - Člen | 18
 
Zdravím,
chtěl jsem se zeptat, jak by jste řešili načítání celých js. souborů.
Načítali to přes js nebo to dali do stránky o úroveň vejš.
Například pokud mám výpis uživatelů user/users a každého můžu editovat
pomocí formuláře, který vyjede modal oknem a je načten ajaxem
z user/update. Ve formuláři mám datetimepicker. Skript obsluhující
datetimepicker by jste načetli např tak:
var url = {$basePath}+"/libs/datetimepicker.js";
	$.getScript( url, function() {
		$('#datepicker').datetimepicker({
			locale: 'cs',
			viewMode: 'days',
			format: 'DD.MM.YYYY'
		})
	});
nebo by jste ho rovnou dali do template user/users a do template user/update by jste dali jen ten spuštěcí script?
$('#datepicker').datetimepicker({
	locale: 'cs',
	viewMode: 'days',
	format: 'DD.MM.YYYY'
})
díky :)