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 | 1029
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 :)