JavaScript & DOM & Hazır Kütüphaneler orhan
Diğer özellikler: Prototype'ın yetenekleri saymakla bitmiyor ancak bu makale dizisinde temel olarak en çok kullanılanlara değinmeye çalıştık. Son olarak birkaç faydalı özellikten de bahsederek seriyi sonlandıralım.
Sayılar
Prototype'ın sayılar konusunda birkaç ufak aracı da mevcut. Aslında çok da spesifik olmayan bu araçlar, çok satır kod ile gerçekleştirilen işlemleri Prototype'ın esnek yapısı ile kolayca yapabilmeye yarıyor.
- .succ: Daha öncede anlatıldığı üzere bir ObjectRange nesnesinin bir sonraki elemanını verir ki burada ardışık sayı anlamına geliyor.
- .times: Ruby'deki gibi döngüler yaratmaya yarar. "map" ya da "collect" gibi de düşünülebilir.
- .toColorPart: Verilen rakamı (0-255 arası), iki haneli hekzadesimal renk koduna çevirir. Bu fonksiyon ile RGB renk kodlarından web için renk kodları üretebilirsiniz.
-
(5).succ() // -> 6
-
-
(5).times(function(n) {
-
// 0′dan 5′e kadar döngü kurar.
-
// parantezler JavaScript sözdiziminden dolayı konmalıdır. Aksi taktirde hata oluşacaktır.
-
});
-
-
‘#’ + [128, 10, 16].invoke(’toColorPart’).join('’)
-
// ‘#800a10′
Olay Gözleme (Observe)
Bu metot "addEvent()" fonksiyonu gibi, genel olarak bir DOM ağacına bir olay (event) eklemek için kullanılır. (çoklu tarayıcı desteğine sahiptir)
<h2 id="mydiv">Beni tıkla!</h2>
<script type="text/javascript" language="javascript">
Event.observe('mydiv', 'click', function(e){ alert(Tıkladın dimi!') });
</script>
Eklenmiş bir olayın geçerliliğini sonlandırmak için ise "Event.stopObserving()" fonksiyonunu kullanabilirsiniz. Daha kapsamlı bilgi için "Event" nesnesini inceleyebilirsiniz.
Önceden Tanımlı Ziyaretçi Girdileri
Yine "Event" nesnesine bağlı ön tanımlı ifadeler olan bu durumlar ile olay yönetimlerini kolayca yönetebilirsiniz.
- KEY_BACKSPACE: Geri boşluk tuşuna basıldığı durumu belirtir.
- KEY_TAB: Sekme tuşuna basıldığı durumu belirtir.
- KEY_RETURN: ENTER tuşuna basıldığı durumu belirtir.
- KEY_ESC: Çıkış tuşuna basıldığı durumu belirtir.
- KEY_LEFT: Sol ok tuşuna basıldığı durumu belirtir.
- KEY_UP: Yukarı ok tuşuna basıldığı durumu belirtir.
- KEY_RIGHT: Sağ ok tuşuna basıldığı durumu belirtir.
- KEY_DOWN: Aşağı ok tuşuna basıldığı durumu belirtir.
- KEY_DELETE: Silme tuşuna basıldığı durumu belirtir.
- KEY_PAGEUP: Page up tuşuna basıldığı durumu belirtir.
- KEY_PAGEDOWN: Page down tuşuna basıldığı durumu belirtir.
- isLeftClick(): Sol fare tuşunun tıklandığı anı belirtir
- pointerX(): Fare imlecinin yatay pozisyonunu belirtir. (piksel olarak)
- pointerY(): Fare imlecinin dikey pozisyonunu belirtir. (piksel olarak)
Basit bir örnek yaparsak:
<script type="text/javascript">
<!--
function showPosition(e) {
if (Event.KEY_TAB) {
alert("Sekme tuşuna bastınız!");
}
//-->
</script>
<form name="myform" id="myform" method="post" action="">
<p>
<label for="textfield">Metin girdisi :</label>
<input type="text" name="textfield" id="textfield" onchange="showPosition();">
</p>
</form>
Bir diğer örnek:
Event.observe('signinForm', 'submit', checkForm);
Şablon Desteği
Benzer ifadeler ile çalışırken veya ziyaretçiye bir çıktı verirken sadece belli kısımları değiştirmenize olanak tanıyan şablon ihtiyaçlarınızı Prototype'ın güçlü şablon desteği ile giderebilirsiniz. Ruby geliştiricilerinin kolayca adapte olabilecekleri bir sınıf olan bu şablonlarda değiştirmek istediğinizi bölümleri belli değişkenler ile belirtmekteyiz. Değişken isimlerini formatı ise "#{alanAdi}" şeklinde olmakta.
-
// şablonumuz (formatlama ifademiz)
-
var myTemplate = new Template(’Televizyon şovu olan #{title}, #{author} tarafından kaleme alınıp #{network} şirketi tarafından yayınlanmaktadır.’);
-
-
// verimizdeki alanlara yerleştirilecek değişkenler
-
var show = {title: ‘The Simpsons’, author: ‘Matt Groening’, network: ‘FOX’ };
-
-
// verimizi formatlayalım
-
myTemplate.evaluate(show);
-
// Televizyon şovu olan The Simpsons, Matt Groening tarafından kaleme alınıp FOX şirketi tarafından yayınlanmaktadır.
Böylece önceden formatladığınız verileri ziyaretçiye sunulması aşamasından yeniden yapılandırıp sunabilirsiniz. Çoklu dil desteğine sahip uygulamalar geliştirmek için oldukça kullanışlı bir yöntem olsa gerek. Dikkat etmeniz gereken bir nokta şablonlarınız içerisinde ters bölü (backslash) kullanmamanız gerektiğidir. Örneği inceleyerek ne demek isteğimi daha iyi anlayabilirsiniz.
-
var t = new Template('#{lang} programlarken şablonlar için \#{variable} sözdizimini kullanırız.');
-
var data = {lang:’Ruby’, variable: ‘(kullanımayan)’};
-
t.evaluate(data);
-
// Ruby programlarken şablonlar için #{variable} sözdizimini kullanırız.
İsterseniz kendi şablonlarınızı da yazarak size özel ifadelerin bulunup verilerle uygun biçimde değiştirilmesini sağlayabilirsiniz.
-
var syntax = /(^|.|\r|\n)(\<%=\s*(\w+)\s*%\>)/; // '<%= alan %>' şeklindeki kısımları yakalayacaktır
-
var t = new Template(’<div>İsim: <strong><%= name %></strong>, Yaş: <strong><%=age%></strong></div>’, syntax);
-
t.evaluate( {name: ‘John Smith’, age: 26} );
-
// <div>İsim: <strong>John Smith</strong>, Yaş: <strong>26</strong></div>
Sınıf Yaratma İşlemleri (Class creation)
Geliştirme sürecinin tutarlı ve uyumlu bir biçimde ilerlemesi için kendi yazdığımız sınıflarda (class), Prototype'ın güçlü yapısını kullanabiliriz. Yapılandırıcı ve metotları eklemenin oldukça kolay ve basit olduğu "Class.create()" nesnesiyle sizde prototype tabanlı güçlü uygulamalar yazabilirsiniz.
-
yClass = Class.create();
-
MyClass.prototype = {
-
initialize: function(a, b) {
-
this.a = a;
-
this.b = b;
-
this.secondfunc();
-
},
-
secondfunc: function(){
-
this.t = ’secondlife’;
-
}
-
}
-
-
var mc = new MyClass("foo", "bar");
-
alert(mc.t)
Benzer bir biçimde nesne yönelimli gelişmiş programlama dillerindeki gibi alt sınıflar yaratmak için de "Class.extend()" metodunu kullanabilirsiniz.
Prototype eklentileri (add-on) olarak bilinen uygulamalar bu sınıf yaratma yöntemi ile prototype tabanlı yazılmış uygulamalar anlamına gelmektedir.
Konumlandırma işlemleri (Positioning)
Sayfa içerisindeki elementlerin CSS konumlandırma özellikleri ve boyutları üzerinde mutlak hakimiyet için çok kullanışlı metotları bünyesinde barındıran bu araçlar hakkında daha ayrıntılı bilgi için resmi Prototype API dokümantasyonuna göz atabilirsiniz.
- Position.absolutize
- Position.clone
- Position.cumulativeOffset
- Position.offsetParent
- Position.overlap
- Position.page
- Position.positionedOffset
- Position.prepare
- Position.realOffset
- Position.relativize
- Position.within
- Position.withinIncludingScrolloffsets
Örnek kullanım
-
var element = $('some_positioned_element');
-
-
Position.cumulativeOffset(element);
-
// [100, 100] (element üst ve sol kenardan 100px uzakta konumlandırılmış)
-
-
element.getDimensions();
-
// { width: 150, height: 150 }
-
-
Position.within(element, 175, 145);
-
// true
-
-
Position.overlap(’horizontal’, element);
-
// 0.5 (element genişliğini tam ortasındaki nokta)
-
-
Position.overlap(’vertical’, element);
-
// 0.3 (element yüksekliğinde 3/10 luk mesafedeki nokta)
...bitirirken
Prototype gibi geliştirme sürecini kısaltan ve yöntem geliştirmek için harcayacağınız zamanı kodu ve yapıyı geliştirmeye harcayarak daha kaliteli ve hatasız uygulamalar yazmanıza olanak tanıyan hazır kod kütüphaneleri her geçen gün daha çok ilgi görmekte. Eğer böyle bir işlevselliğe ihtiyacınız varsa bu tür çalışma ortamlarını kullanmaktan çekinmemeniz gerektiğini önererek bu yazıyı sonlandırmak istiyorum. Sorunlarımız ve çözümlerimiz emsalsiz olmadığı sürece bu tür açık kaynaklı kütüphaneler biz web geliştiricilerini memnun edeceğe benziyor. Herkese iyi çalışmalar ve bol prototype'lı günler diliyorum.
Prototype ile ilgili kaynaklar:
- Resmi Prototype.js API dokümantasyon
http://www.prototypejs.org/api/ - Script.aculo.us Prototype dokümantasyon
http://wiki.script.aculo.us/scriptaculous/show/Prototype - Sergio'nun resmi olmayan prototype dokümantasyonu
http://www.sergiopereira.com/articles/prototype.js.html - Prototype.js hızlı başlangıç kılavuzu
http://particletree.com/features/quick-guide-to-prototype/ - Prototype 1.5 API dokümantasyonu (indirilebilir PDF)
http://beta.bigmedium.com/projects/prototype-pdf/ - Prototype JavaScript kütüphanesi incelemesi
http://blogs.ebusiness-apps.com/jordan/pages/Prototype%20Library%20Info.htm
Orhan Veli Firik <info@dw.gen.tr> - Mayıs 2007
Toplamda 11450 kez okunmuş.
Şu an 2 kişi okuyor.
En fazla 8 kişi aynı anda okumuş.
Bugün 8 kez okunmuş.
Etiketler: javascript, kütüphane, prototype
Trackback Yorumları takip et Baskı Önizleme

(12 oy, ortalama 4.75)
# eburhan | 19 Mayıs 2007, 11:01
Bu yazı dizisi için sana ne kadar teşekkür etsek azdır. Prototype ile ilgili Türkçe olarak güzel bir kaynak kazanmış olduk. Emeğin için teşekkür ederiz …
# orhan | 19 Mayıs 2007, 23:50
tüm web camiasına hayırlı vede uğurlu olsun.
sevgiler….
# gokhanweb | 21 Mayıs 2007, 11:41
Bence bu tür şeyleri öğrenerek boşuna vakit kaybediyorsunuz. JavaScripti adam akıllı öğrenin bu tür şeylere hiç ihtiyacınız olmaz. Zaten bu kadar (7 derslik) çok dersi okuyup öğrenmek için vereceğiniz uğraşla javascript bilginizi geliştirebilirsiniz.
# kılavuz | 21 Mayıs 2007, 13:28
“klavuz” değil, “kılavuz” olacak…
iyi çalışmalar.
# orhan | 22 Mayıs 2007, 09:55
sevgili @gokhanweb bir noktaya açıklık kavuşturmak istiyorum;
Prototype tek başına öğrenilmesi gereken yada işin temelini teşkil eden bir şey değil. Adından da anlaşılacağı üzere Prototype.js bir “JavaScript geliştirme kütüphanesidir”. Yani prototype ı kullananlar zaten oldukça iyi bir düzeyde JavaScript biliyorlar fakat projelerinde bir tutarlılık ve fonksiyonelliğe ihtiyaçları var. İşte bu eksiği kapatmak için hazır ana çatıları (frameworkleri) kullanmaktalar.
Tabiki koşmadan önce yürümek ondan öncede emeklemek gerekiyor. Seninde dediğin gibi Ajax ile proje geliştirmeden, Prototype ı kullanmadan önce temel ve hatta iyi düzeyde bir JavaScript bilgisine ihtiyaç var.
Evet gerçekten “kılavuz” olması gerekiyor
düzeltme için teşekkürler
# eburhan | 22 Mayıs 2007, 21:40
Merhaba.
Bu JavaScript kütüphanelerine bu kadar basit birşeymiş gibi bakmamalısınız. Bu kütüphaneler konularında son derece bilgili kişiler tarafından hazırlanıyorlar.
Prototype kütüphanesinin içerisine hiç göz gezdirdiniz mi? İçerisinde iyi derecede JavaScript bilgisine sahip pekçok kişinin haberdar bile olmadığı optimizasyonlar, bellek sızıntılarını önleyen kodlar mevcut.
Ayrıca web tarayıcıları JavaScript konusunda son derece problemliler. Bir web tarayıcısında sorunsuz çalışan kod diğer web tarayıcılarında çalışmayabiliyor. İşte javascript kütüphaneleri bu tür problemlerle boğuşmanızı engelleyen cross-browser çözümler de sunmaktadırlar.
# ayşe | 25 Mayıs 2007, 23:15
Son iki mesajımı silebilirsiniz. Prototype.js yi temel.js haline getirme yani Türkçeleştirme işinde ki bir iki yanlışımı düzelttim. Linkteki temel.js yi yenisi ile değiştirdim.
http://vebgelistirme.googlepages.com/temel.js
# gökhan | 30 Mayıs 2007, 19:57
yerinde bir ders sistemi olmuş.gayet güzel.benimle birlikte istifade eden herkes ve kendi adıma çok teşekkürlerimi iletiyorum.iyi çalışmalar dilerim…
# kemati | 04 Haziran 2007, 12:20
Gerçektende güzel bi makale olmus bütün 7 yazıyıda okudum gercekten cok isime yaradı…
Tabiki kimse javascriptin j sini bilmeden burda yazanları uygulayacak değil zaten bişeyde yapamaz.. Ama js bilenlerin cok işine yarayacaktır.. Özellikle profesyonel anlamda yapılmıs bircok kütüphaneninde temelde prototype i kullandığını görünce kesin prototype i ogrenmem gerektiğini düşündüm..
Emek verenlere tesekkürler …
# orhan | 08 Haziran 2007, 17:16
evet birçok kütüphane Prototype.js kullanıyor fakat yeni çıkan kütüphaneleri de es geçmeyin derim ben
Zira genç geliştiriciler fonksiyonellik, esneklik ve performansı minimalist bir yaklaşımla yeniden yorumlamaktalar. Uzun lafın kısası alternatifleri de göz ardı etmeyin …
http://www.cameronolthuis.com/2006/06/top-10-web-developer-libraries/
http://www.blinklist.com/lunchbox/javascript%20libraries/
buda Azer Koçulu’nun CivCiv’i
http://civciv.kodfabrik.com/ (made in Turkiye)
# mehmet | 23 Haziran 2007, 03:40
Eline emeğine sağlık çok güzel ve faydalı bir çalışma olmuş. Çok istifade ettim.
Teşekkür ederim.
# ayşe | 30 Haziran 2007, 18:16
http://dttvb.yi.org/dtjs/
Yukarıdaki linkte de bir javascript kütüphanesi var. Nasıl kullanıldığı anlatılıyor.
# wcell | 14 Ağustos 2007, 19:06
ellerine sağlık kardeş,sağolasın…