Závislé selectboxy a plugin select2

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

Ahoj,

pracujem na spracovávaní závislých selectBoxov, kde podľa výberu možnosti z prvého selectBoxu sa dynamicky mení obsah druhého selectBoxu. Používam pritom AJAXové spracovanie, môj JS kód vyzerá asi takto:

<script>
$('#mySelect1').off('change').on('change', function () {

	var myValue = 0;

	// ...

    $.nette.ajax({
        type: 'GET',
        url: {link {$link}!},
        data: {
            'myForm-myValue': myValue,
        }
    });
</script>

Všetko funguje dobre, volá sa správny handler so správnymi hodnotami. V handleri potom upravím druhý selectbox a pomocou metódy redrawControl(‚…‘) ho úspešne prekreslím.

Nad selectboxami ale používam plugin select2. Takto inicializujem daný selectbox:

<script>
		$('#mySelect2').select2({
            width: '100%',
            theme: 'bootstrap',
            language: 'cs',
        });
</script>

A tiež to funguje. Až do chvíle než refreshnem druhý selectbox pomocou handleru. Na iných fórach som našiel, že je možné daný select zrušiť pomocou .select2('destroy') a znova reinicializovať. Alebo že je možné jednoducho upraviť dáta tela select2 (pri udalosti onChangeEvent selectu). Ale vyzerá to tak, že vždy po naplnení dát do select2 sa vykoná handler vyššie a požadovaný selectbox znova prekreslí tak, že select2 nad ním nefunguje.

Nestretol sa s tým niekto alebo nevedel by niekto poradiť. Za každú odpoveď ďakujem.

Mistrfilda
Člen | 76
+
0
-

Ahoj, nejsem si úplně jistý jestli je to čisté řešení :), ale zkusím to. Udělal bych si snippet nad druhým scriptem:

{snippet select2Script}
<script>
        $('#mySelect2').select2({
            width: '100%',
            theme: 'bootstrap',
            language: 'cs',
        });
</script>
{/snippet}

A potom v handle metodě, kde ho plníš daty, bych ho po naplnění a překreslení zavolal

<?php

public function handleFill($id)
{
    //naplnění daty
	$this->redrawControl(.....); //překreslení selectboxu
	$this->redrawControl('select2Script'); //překreslení scriptu pro select2
}

?>
schnappi
Člen | 13
+
0
-

funguje, vďaka! :)