Archive for January, 2010
CakePHP, pagination, jQuery i zakładki (tabs)
Jakoś tak wyszło, że więcej bawię się ostatnio jQuery. Pojawił się kolejny problem:
przerobić Pagination cake’a na taki, żeby działał po ajaxie w zakładkach jQuery (jquery.ui.tabs):
Z pomocą przyszedł chankov.net z takim oto skryptem:
$('a[href*=/sort:],a[href*=/page:]').livequery('click', function(){
$('#content').load($(this).attr('href'));
return false;
});
Niestety nie ma chyba kontroli nad tym jakie id jquery.ui nada div’om, które są zawartością dla danej zakładki. Jednak i na to jest sposób (dzięki pluginowi livequery), nalezy zamiast
$('#content').load($(this).attr('href'));
Użyć nieco bardziej skomplikowanego selektora. Zakładając, że #content to div przechowujący zakładki (wywołałeś jQuery(“#content”).tabs()), to nalezy zmienić powyższą linię na
jQuery('#contents>div:visible').load(jQuery(this).attr('href'));
Dzięki selektorowi ‘#contents>div:visible’ znajdziesz w elemencie o id #contents pierwszego div’a (>div), który jest widzialny (:visible), a to właśnie jest element, którego zawartość należy uaktualnić nowymi danymi…
Jak wyczyścić cache dla zakładek (tabs) w jQuery?
Notka ku pamięci (żeby następnym razem nie szukać godzinę rozwiązania pt JQuery.tabs.disableCache).
Jeśli używasz zakładek (jQuery.UI.tabs()) z włączonym keszowaniem (co jest dobrym pomysłem, ze względu na czas odpowiedzi) to możesz w końcu dojść do momentu, że należy wyczyścić cache dla konkretnej zakładki
(dlatego, ze na przykład został wykonany ajaxowy submit formularza).
Nie znajdziesz niestety funkcji “clearCache”, którą ja bezskutecznie poszukiwałem (zakładałem, że najpierw muszę wyczyścić cache dla tej zakładki, a później obsłużyć załadowanie nowych elementów do zakładki). Okazuje się, że można to zrobić równocześnie za pomocą metody “load”:
jQuery(“#idKonteneraZakladek”).tabs(“load”, [id_zakłaki]);