Best practice – Rebind po ajaxovem volani

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

Ahoj,

Verim, ze se to asi uz resilo mnohokrat, nicmene, bych potreboval najit nejake cistejsi reseni, nez ktere prave pouzivam…

Stavim pomerne velky system a prakticky vsechno co se da prekresluju ajaxem.

Ted resim pomerne trivialni otazku… Ajaxem potrebuji prekreslovat jen velmi male cast a potrebuji nejakym zpusobem systemu rict, ktere konkretni elementy po volani ajaxu rebindovat. Je totiz nerealne vsechno rebindovat znovu a znovu pri kazdem volani ajaxu.

Pro priklad… Jak napriklad udelat jednoduchu formular s dvema selectboxama, ktere pouzivaji nejakou jQuery nadstavdu (select2, selectize, apod…)

Pri nacteni stranky inicializuji oba selectboxy, ale pri change eventu toho prvniho potrebuji prekreslit a znovu inicializovat jen ten druhy checkbox…

No snad je pochopitelne o co mi jde…

@flexroad

akadlec
Člen | 1326
+
0
-

třeba pomocí nette.ajax.js extensions, či čistého JS, nebo JS objektů apod…vše záleží na tom jako to JS řešíš.

flexroad
Člen | 117
+
0
-

@akadlec : pouzivam nette.ajax.js.
Nebyl by nejaky konkretni priklad?

Resim ted napriklad to, ze pokud kliknu na nejaky odkaz, tak se mi prekresli kus stranky a znovu inicializuji veskere komponenty ktere v ni muzou (ale nemusi byt obsazene). Pokud ale v ramci te nove vykreslene casti (snippetu) pouziju treba nejaky selectbox (ktery se mi v pohode vykresli) a potom zmenim jeho hodnotu, potrebuju, aby se mi prekreslil jen jiny selectbox a znovu inicializovala JEN A POUZE zminovana select2 komponenta jen pro ten prekresleny selectbox a NIC JINEHO!

Strasne spatne se to vysvetluje, snad bude priklad pochopitelny.

Ted na to mam navesene neco takoveho:

(function($, undefined) {
     $.nette.ext('loader', {
         success: function () {
// toto je funkce, ktera inicializuje vsechny komponenty po kazdem volani nette.ajax.
//to ale nechci pokud potrebuji prekreslit jen jednu jedinou komponentu a znova ji inicializovat
         	Main.rebind();
         }
     });
 })($);

Editoval flexroad (17. 4. 2015 17:22)

bazo
Člen | 620
+
0
-

vloz si do data atributov toho spustaca ajax requestu ake komponenty sa maju rebindovat a podla toho ich rebinduj