Ztráta class po redrawControl

před 4 měsíci

jedlicka
Člen | 22
+
0
-

Ahoj,

Mám v šabloně (modal) formulář, který obsahuje select se třídou select2 a vše je OK:

<form n:snippet="modal-body">
   <input type="hidden" id="customerID" value="{ifset $cust}{$cust}{/ifset}" />
   <select id="users" class="form-control select2">
      <option value="-1">Vyberte</option>
      {ifset $fleets}
         {foreach $fleets as $key => $fleet}
            <option value="{$key}">{$fleet}</option>
         {/foreach}
      {/ifset}
   </select>
</form>

Když se změní obsah selectu (proměnná $fleets) v presenteru a chci aktualizovat snippet:

$this->template->fleets = $fleets;
$this->redrawControl('modal-body');

, tak se „ztratí“ třída select2, tzn. že select je bez stylizace select2 (a je pouze v základním bootstrapu).

Nevíte, jak aktualizovat select, aniž by došlo ke ztrátě třídy?

Díky.

Martin

před 4 měsíci

Ondřej Kubíček
Člen | 377
+
0
-

ta třída se nemůže jen tak ztratit, když tam zůstane classa form-control, tak musí i select2

když se podíváš do requestu co dojde ze server, opravdu tam není? není možné že ji odstraní až nějaky js?

před 4 měsíci

Jarek92
Člen | 91
+
+1
-

Ahoj, možná by si měl po dokončení ajaxu znovu pomocí JS inicializovat select2.

$(document).ajaxComplete(function() {
  // inicializace select2
});

před 4 měsíci

jedlicka
Člen | 22
+
0
-

Koukal jsem, že ta třída select2 nezmizí (je tam stále), ale ta funkčnost nefunguje, tzn. že se nenačte JS (select2.min.js), resp. to vypadá, že všechny JS pro šablonu nejsou nečtené. Hlavně to vypadá, že to není refreshem snippetu, ale zavoláním:

$.nette.ajax({
   url: "?do=selectFleet",
   type: 'GET',
   data: {
      customerID: id,
      customerName: uid
   },
   success: function (success) {
     alert('done');
   }
})

před 4 měsíci

jedlicka
Člen | 22
+
-1
-

Díky za radu. Stačilo udělal toto:

$(document).ajaxComplete(function() {
// inicializace select2
   $("#users").select2();
});

před 4 měsíci

Šaman
Člen | 2283
+
+1
-

Tak to jo. Že se po překreslení „deaktivuje“ JS, to je běžné, pokud byl navázaný na element, který byl vymazán a nahrazen jiným. Řešením je opět po provedení požadavku navázat JS na nové DOM elementy.
Ale že by to smazalo třídu, která je v šabloně, to by bylo divné.

před 4 měsíci

CZechBoY
Člen | 3312
+
+1
-

Měl by sis udělat rozšíření nette.ajax.js (pomocí $.nette.ext(...)) namísto nějakýho globálního hookování ajax eventů.

před 4 měsíci

Jarek92
Člen | 91
+
0
-

CZechBoY napsal(a):

Měl by sis udělat rozšíření nette.ajax.js (pomocí $.nette.ext(...)) namísto nějakýho globálního hookování ajax eventů.

Mohl bys to prosím trochu rozepsat? a popř v čem je toto řešení lepší? Děkuju :)