Snippet zavolanie js funkcie pri reloade

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
tino415
Člen | 46
+
0
-

Zdravím, neexistuje nejaký spôsob ako zavolate js funkciu vždy keď sa prekreslí jeden snippet ? Mám select implementovaný pomocou typeahead a potrebujem vymeniť source vždy na základe toho čo je zobrazené v snippete…

akadlec
Člen | 1326
+
0
-

no musíš si tam registrovat event a v něm pak měnit ten source pro typeahead.

tino415
Člen | 46
+
0
-

Ok, a kde ? Dáva snippet nejaký event ? Stačí si to bindnuť na

<script>
$('#snippet--my-snippet').on('snippet:reload', myHandlerFunction);
</script>

alebo niekde inde ?

jiri.pudil
Nette Blogger | 1029
+
+2
-

Pokud používáš nette.ajax.js, jeho rozšíření pro snippety vyvolává události před a po překreslení. Musíš si v té funkci jenom pohlídat, aby se vnitřek provedl jen pro ten jeden konkrétní snippet.

$.nette.ext('snippets').after(function ($el) {
	if ($el.is('.my-snippet')) {
		// ...
	}
});
akadlec
Člen | 1326
+
0
-

to je docela prasečina, takto výjimkovat univerzální kód

akadlec
Člen | 1326
+
0
-

takto by to taky šlo ale řek bych že by sis musel pak ještě někde přidat trigger co by ti tuhle event odpálil. Toto by se dalo udělat i obecně a pokud používáš nette.ajax tak do after metody by se to tam mohlo přidat aby to odpálilo nějakou event. Možná podnět pro @VojtěchDobeš

matopeto
Člen | 395
+
0
-

Mne to pride ok, ziaden univerzalny kod to nie je, je to tvoje konkretne rozsirenie.

tino415
Člen | 46
+
0
-

Ďakujem, toto funguje :)

kleinpetr
Člen | 480
+
0
-

Já jsem něco podobného řešil pro edit form v modálnim okně a vyřešil jsem to takhle:
template:

<a data-href="{link edit! $id}" class="editInModal">Upravit</a>

{snippet editFormSnippet}
<div class="modal" id="editModal">
..
..
{control editForm}
..
..
</div>
{/snippet}

presenter:

public function handleEdit($id){
..
..
$this['editForm']->setDefaults(..);
$this->redrawControl('editFormSnippet');
..
}

js:

$('.editInModal').click(function(){
	var link = $(this).data('href');
        $.nette.ajax({
            url: link,
            complete: function () {
                $('#editModal').modal();
            }
        });
});

Snad to neni prasárna a bude se někomu hodit. Pokud má někdo lepší řešení, tak určitě přivítám :)

Editoval kleinpetr (6. 12. 2015 19:15)