Sayfalama yaparken “önceki sayfa” “sonraki sayfa” baÄ?lantılarında yalnızca deÄ?iÅ?en kısım kayıtların listesinin bulunduÄ?u kısımdır. Madem Ajax diye bir olay var, bence kullanımının olacaÄ?ı en güzel yerlerden birisi de sayfalama olaylarıdır.
Yazıda hem Ajax’ın Rails içerisinde nasıl bir kullanımı olabileceÄ?ine deÄ?inecek, hem de sayfalama sistemini inceleyeceÄ?iz. Ayrıca yazıda “render” fonksiyonunu ve “layout” içeriÄ?ini yansıtmadan yalnızca dosya içeriÄ?ini yansıtmayı saÄ?layan “render :partial” olayını göreceÄ?iz.
Ajaxsal Sayfalama Mekanizması
Ruby On Rails, müthiÅ? iki JavaScript kütüphanesi olan Scriptaculous Ve Prototype ile beraber gelmektedir. Ajaxsal yordamları & efektleri bu iki kütüphane sayesinde Rails’in bize sunmuÅ? olduÄ?u fonksiyonlar ile oldukça hızlı Å?ekilde gerçekleÅ?tirebiliriz. “Pagination” sınıfının ne olduÄ?una ve örnek kullanımına bi’ kaç bildiri öncesinde yer vermiÅ?tim.
BaÅ?ka neler göreceÄ?iz?
Ayrıca yazıda “render” fonksiyonunu ve “layout” içeriÄ?ini yansıtmadan yalnızca dosya içeriÄ?ini yansıtmayı saÄ?layan “render :partial” olayını göreceÄ?iz.
Yazının devamında makalenin tamamını bulabilirsiniz.
Gerekli Denetleyici & İÅ?levlerin (sayfaların) OluÅ?turulması
Yazıda örnek olarak “Emlak” modeli kullanılmıÅ?tır. Modelin alanları veya iliÅ?kilendirmeleri önemli olmadıÄ?ından herhangi bir model kullanabilirsiniz.
Ã?alıÅ?ma Prensibi
Ã?ncelikle “Ajaxsal” bir olayda sayfanın belli bir bölümünün deÄ?iÅ?eceÄ?ini hesaba katarak, deÄ?iÅ?ecek olan sayfa kısımlarını ayrı bir fonksiyonda tutmamız gerektiÄ?ini belirtmekte yarar var. Bu nedenle sayfamızın kayıtları listeleyecek olan kısımlarını ayrı bir fonksiyona yaptıracak, bu fonksiyonunda görünümünü yalnızca “liste” yapacaÄ?ız.
Denetleyici Komutları:
def index
_liste
end
def emlak_liste
_liste
render :partial => 'emlak_liste'
end
private
def _liste
@emlak_adet = Emlak.toplam_adet
@emlak_sayfalar, @emlaklar = paginate_collection Emlak.tum_emlaklar, {:per_page => 3, :page => params[:page]}
end
Görünüm Dosyaları:
<h1>Emlak Listesi</h1>
<div id="liste">
< %= render :partial => 'emlak_liste' %>
</div>
# _emlak_liste.rhtml
< % sonraki = @emlak_sayfalar.current.next %>
< % onceki = @emlak_sayfalar.current.previous %>
<!-- liste kaydı -->
< % @liste.each do |l|
<%= l.alan %>
< % end %>
<!-- / liste kaydı -->
< %= link_to_remote 'Ã?nceki Sayfa', :update => 'liste', :url => { :action => :emlak_liste, :page => onceki } if onceki %>< %= ' | ' if onceki && sonraki%>
< %= link_to_remote 'Sonraki Sayfa', :update => 'liste', :url => { :action => :emlak_liste, :page => sonraki } if sonraki %>
Denetleyici iÅ?levlerini incelediÄ?imizde “ana” fonksiyonda (index) ilk kayıtların seçildiÄ?ini göreceÄ?iz Daha sonrasında bu fonksiyon bize “emlak.rhtml” dosyasını gösterecektir.
Yukarıdaki kısımlar normal Å?ekilde kullandıÄ?ımız olaylar.
Burada bize garip gele(bile)cek olan ise render :partial kısmı. “render :partial” görüldüÄ?ü yere “partial” görünümü yerleÅ?tirir. “Partial” görünümlerin normal görünüm dosyalarından farkı “layout” içeriÄ?ini yansıtmamalarıdır. Yani “.rhtml” dosyasında ne var ise onu ekrana yansıtırlar. Fakat, normal görünümler varsayılan olarak “layout” belirtilmiÅ? ise “layout” dosyasında < %= @content_for_layout %> yahut < %= yield %> gördükleri yere kendilerini yerleÅ?tirirler.
(Bu konuda bir yazı yazmayı düÅ?ünüyorum en kısa zamanda.)
Ayrıca “render :partial” ile belirtilen dosyalar kayıt edilirken isimlerinin önüne “_” alırlar.
_emlak_liste.rhtml dosyasını incelediÄ?imizde normal Å?ekilde kayıtlarını listelediÄ?inizi görüyoruz. Burada bize garip gelebilecek olan komut ise “link_to_remote” .
Nedir link_to_remote?
“link_to_remote” Prototype altyapısını kullanarak Ajax yordamını çaÄ?ıracak iÅ?levleri otomatik olarak oluÅ?turan “ActionView::Helpers::PrototypeHelper” modülüne ait bir fonksiyondur.
Yukarıdaki komut “liste” idsine sahip içeriÄ?i “emlak_liste” sayfasından gelen içerik ile güncelleyecektir. (:page argümanının emlak_listesi iÅ?levine sayfa numarası gönderen “params” olduÄ?unu unutmayalım.)
Yüklenirken dönen resim istiyorum!
link_to_remote iÅ?levi tam kullanım olarak ” link_to_remote(name, options = {}, html_options = {}) ” biçimindedir. Protoype üzerinde kullanacaÄ?ınız “callback” olaylarını link_to_remote iÅ?levine argüman olarak verebiliyorsunuz. (örneÄ?in :loading => ‘javascript iÅ?levi’)
Biterken
Yakın bir zamanda web yazılımları masaüstü yazılımlarının yerini almaya baÅ?layacak düzeye gelecektir. Bu nedenle JavaScript günümüz web teknolojisinde oldukça önem kazanmaya baÅ?lamıÅ?tır.






