Best practice – Rebind po ajaxovem volani
- flexroad
- Člen | 117
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
- flexroad
- Člen | 117
@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)