
Uzun zaman boyunca Ext JS 3 ile projeler geliştirdikten sonra, yakın zamanda bir çok yeni beta versiyonu çıkan Ext JS 4 ile çalışmaya başladım. Bu makalemde sizlerle Ext JS 4 için hızlı bir başlangıç klavuzu oluşturmaya çalışacağım. Makalenin hazırlanmasında Sencha Learning Center‘da bulunan ilgili makalelerden faydalanıldığını belirtmek isterim… 1. Gereksinimler (Requirements) 1.1 Web Tarayıcılar Ext [...]
Uzun zaman boyunca Ext JS 3 ile projeler geliştirdikten sonra, yakın zamanda bir çok yeni beta versiyonu çıkan Ext JS 4 ile çalışmaya başladım. Bu makalemde sizlerle Ext JS 4 için hızlı bir başlangıç klavuzu oluşturmaya çalışacağım. Makalenin hazırlanmasında Sencha Learning Center‘da bulunan ilgili makalelerden faydalanıldığını belirtmek isterim…
1. Gereksinimler (Requirements)
1.1 Web Tarayıcılar
Ext JS 4 Google Chrome’um son sürümü, Internet Explorer 6 ve diğer tüm popüler web tarayıcıları desteklemektedir. Debugging (hata ayıklama) v.b. işlemleri daha kolay yapabilmeniz ve rahat bir geliştirme ortamı sağlaması açısından aşağıdaki tarayıcıları ve araçları kullanmanız önerilmektedir;
- Google Chrome 10+
- Apple Safari 5+
- Mozilla Firefox 4+ with the Firebug Web Development Plugin
- Windows üzerine Apache kurulumu hakkında bilgiler
- Linux üzerine Apache kurulumu hakkında bilgiler
- Mac OS X ‘de apache kurulumu birlikte gelmektedir. “System preferences > Sharing” den “Web Paylaşımı”nı etkinleştirmeniz yeterlidir.
- Windows – “C:\Program Files\Apache Software Foundation\Apache2.2\htdocs”
- Linux – “/var/www/”
- Mac OS X – “/Library/WebServer/Documents/”
- appname
- app
- namespace
- Class1.js
- Class2.js
- ...
- extjs
- resources
- css
- images
- ...
- app.js
- index.html
appname, uygulamanın tüm kaynak dosyalarını içeren dizindir.app, tüm uygulama sınıflarını ve sistem namespace’ine (isim uzayı) uygun olarak konumlandırılmış sınıfları içerir.extjs, bu dizin adından da anlaşılacağı üzere Ext JS 4 framework’ü içerir.resources, uygulamaya ait tüm stil ve görsel dosyaları bu dizin içerisinde barıdındırılır. Ayrıca bu dizin statik XML ve JSON dosyalarını da barındırabilir.index.html, uygulamanın çalışacağı başlangıç-noktası html dosyasıdır.app.js, uygulamanızın temel mantığını içeren kaynak dosyasıdır.
- helloext
- app.js
- index.html
Ardından helloext dizini altına Ext JS 4 framework’ü “extjs” şeklinde açın.
Tipik bir Ext JS uygulaması tek bir HTML belgesi (index.html) içerisinde yer alır. index.html dosyasına aşağıdakı satırları ekleyin;
<html>
<head>
<title>Hello Ext JS 4</title>
<link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css">
<script type="text/javascript" src="extjs/ext-debug.js"></script>
<script type="text/javascript" src="app.js"></script>
</head>
<body></body>
</html>
extjs/resources/css/ext-all.cssext js için gereken tüm stil bilgilerini içermektedir.extjs/ext-debug.jsExt JS 4 ün çekirdek sınıflarının en minimal halini içerir.app.jsuygulamanıza ait kodları içerir.
Ext.application({
name: 'HelloExt',
launch: function() {
Ext.create('Ext.container.Viewport', {
layout: 'fit',
items: [
{
title: 'Hello Ext JS 4',
html : 'Hello! Welcome to Ext JS.'
}
]
});
}
});
Şimdi tarayıcınızı açın ve http://localhost/helloext/index.html adresine gidin. Bu adrese gittiğinizde bir viewport oluşturulacak ve bunun içerisinde bulunan Panel’in başlığında “Hello Ext JS 4″ ve Panel içerisine “welcome” mesajını göreceksiniz.
2.2 Dinamik Yükleme (Dynamic Loading)
Şimdi Chrome Developer Tools’u açın ve ‘Network’ sekmesine gidin. Ardından Hello Ext JS 4 uygulamanızı yenileyin. Network sekmesinin son satırlarında, Ext Loader’ın “Viewport.js” dosyasını dinamik olarak yüklediğini göreceksiniz.
Ext JS 4 uygulamanızı çalıştırmak için gereken JavaScript kaynaklarını dinamik olarak yükleyen bir sistem ile gelmektedir. Bizim örneğimizde Ext.create Ext.container.Viewport sınıfından bir tane türetir. Ext.create çağırıldığında yükleyici (Ext.Loader) Ext.container.Viewport’ün yüklenip yüklenmediğini kontrol eder ve eğer bulamazsa Ext.container.Viewport sınıfına ait JavaScript dosyasını yüklemeye çalışır. Örneğimizde Viewport.js dosyası başarı ile yüklendiğinirken loader daha fazla sınıfı yükleme gereği duymaz. Ext.container.Viewport sınıfı sadece Viewport.js dosyasını talep ettiğinde bu yükleme uygulamanın çalışması sırasında kısa bir gecikmeye sebep olacaktır. Bu yükleme süresi uygulamanızda kullanacağınıs sınıfların sayısına bağlı olarak değişkenlik gösterecektir. Ancak tüm yüklemeler bittiğinde Ext.onReady() yani DOM.Ready olacaktır ve uygulama çalışmaya başlayacaktır.
Bu beklemelerin önüne geçmek için Ext.application çalıştırılmasından hemen öncekı satırlara aşağıdakı kodu ekleyin;
Ext.require('Ext.container.Viewport');
Bu satır uygulamayı çalıştırmadan önce Ext.Loader’ın devreye girmesini ve Ext.container.Viewport’ a ait Viewport.js dosyasının yüklenmesini sağlayacaktır.
2.3 Ext JS Sınıflarını Dahil Etme Yöntemleri (Library Inclusion Methods)
- ext-debug.js Bu dosya sadece geliştirme (development) sırasında kullanılmak üzere hazırlanmış ve sıkıştırılmamıştır. Bu dosya ile Ext JS için gereken temel sınıflar dinamik olarak yüklenmektedir. Uygulamanız için gereken ek sınıflar için Loader dinamik olarak yükleme yapacaktır.
- ext.js ext-debug.js ile ile aynıdır, ancak ürününüzün son halinde (production) kullanılmak üzere hazırlanmış ve sıkıştırılmış bir halidir. Uygulamanızın app-all.js dosyası ile birlikte kullanılmak üzer tasarlanmıştır. (bkz: Bölüm 3)
- ext-all-debug.js Bu dosya için, dinamik yüklemeye gerek kalmayacak şekilde tüm Ext JS sınıflarının tek bir dosyada toplanmış halidir diyebiliriz. Tabiki bu versiyonda development versiyonu olarak hazırlanmış ve sıkıştırılmamıştır.
- ext-all.js ext-all-debug.js ile aynıdır, ancak ürününüzün son halinde (production) kullanılmak üzere hazırlanmış ve sıkıştırılmış bir halidir. Ancak bu şekilde kullanılması pek tavsiye edilmez. Az sonra 3. bölümde açıklayacağım özel bir yapı oluşturmak için tavsiye edilir.
- bootstrap.js Bu dosya tarayıcının adres satırında index.html’ye vereceğiniz ?debug query string parametresini algılar ve extjs in -debug veya normal versiyonlarını dinamik olarak yükler.
cd path/to/web/root/helloext
Şimdi burada basit bir komut çalıştırarak uygulamanızın içerisinde bulunan tüm kaynakları bir JSB3 dosyası haline getireceğiz;
sencha create jsb -a index.html -p app.jsb3
Eğer uygulamanız PHP, Ruby, ASP v.b. dinamik bir sunucu-taraflı yapının üzerine inşaa edilmiş ise index.html dosyanızı gerçek bir URL ile yer değiştirebilirsiniz;
sencha create jsb -a http://localhost/helloext/index.html -p app.jsb3
Bu komut aslında index.html içerisinde bulunan tüm uygulama çatısı ve uygulamanıza ait dosyaları tarar ve bunları dinamik olarak koşar. Ardından Ext.Loader’ın davranış biçimine paralel olarak app.jsb3 adında bir JSB3 dosyasına uygulamanızın JavaScript kaynaklarını ekler. Bu dosya içerisinde namespace’e paralel olarak konumlandırılmış javascript dosyalarınızın yollarını göreceksiniz. Oluşturulan bu JSB3 dosyasını modifiye ederek kendinize ait özel başka dosyaları da deployment sürecine dahil edebilirsiniz.
Bunun ardından hemen bir ikinci komut ile sıkıştırma ve inşaa etme (build) süreci başlar;
sencha build -p app.jsb3 -d .
Bu komut 2 dosya oluşturacaktır.
- all-classes.js - Bu dosya uygulamanıza ait tüm sınıfların sıkıştırılmış bir halidir. Bu dosya hata ayıklama (debugging) için elverişli bir dosya değildir. “Hello Ext JS 4″ ekstra javascript sınıfları içermediğinden bizim örneğimizde bu dosya boş olacaktır.
- app-all.js – Bu dosya uygulamanızın çalışması için gereken tüm Ext JS sınıfları ve uygulamanıza ait tüm sınıfların barındırıldığı sıkıştırılmış ürününüzün son halinde kullanılmak üzere yayımlamaya hazır bir dosyadır. Kısaca all-classes.js + app.js in sıkıştırılmış halidir diyebiliriz.
<html>
<head>
<title>Hello Ext JS 4</title>
<link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css">
<script type="text/javascript" src="extjs/ext.js"></script>
<script type="text/javascript" src="app-all.js"></script>
</head>
<body></body>
</html>
Dikkat ederseniz ext-debug.js’in yerini ext.js, app.js’in yerini ise app-all.js dosyaları almıştır. Tarayıcınızda http://localhost/helloext/index-prod.js adresine giderseniz “Hello Ext JS 4″ uygulamanızın ürün haline getirilmiş versiyonun çalışan halini göreceksiniz.
Ayrıca yaz dönemi stajında bizimle birlikte çalışan ve ekibe çevirileriyle katkı sağlayan öğrenci kardeşimiz İsmail Teğiz‘e teşekkürler ederim.
….
Evet, konu ile ilgili olarak anlatacaklarım burada bitiyor. Bundan sonra hazırlamaya devam edeceğim diğer makaleleri aşağıdaki sırayla yazmayı düşünüyorum.
- Ext JS 4′ ün Yeni Sınıf Yapısı
- Ext JS 4 MVC Uygulama Mimarisi
Bir süre böyle orjinal makalelerden çevirilerle devam edeceğim. Sonrasında da kendi deneyimlerimden oluşan nispeten daha küçük lokmalar halinde hazırlanmış örnek ağırlıklı yazılar gelecektir.
İyi çalışmalar dilerim….













21 yorumlar
Güzel makale için teşekkürler Tayfun. Yalnız 2.2 bölümünde belirttiğiniz bir şey biraz daha değişik.
“Şimdi Chrome Developer Tools’u açın ve Console’ sekmesine gidin. Ardından Hello Ext JS 4uygulamanızı yenileyin. Konsolda Ext Loader’ın sınıfları yüklemesi ile ilgili bir takım konsol uyarıları göreceksiniz.”
Bu kısımda bahsettiğiniz “Console” sekmesinde herhangi bir dinamik yükleme sonucu görülemiyor. Onun yerine “Network” sekmesinde en alt sonuca bakıldığında “Viewport.js” dosyasının dinamik olarak yüklendiği görülebilir.
Saygılarımla.
Çok açıklayıcı bir yazı olmuş. Ellerine sağlık abi. Devamını bekliyorum
Teşekkürler mehmet. Evet kolları sıvadım. Kapida 2 makale daha. Zamanla screencast seklinde bişeyler de hazırlamayı düşünüyorum.
Teşekkürler Emre. Evet haklısın orada biraz mantık hatası yapmışım. Yetersiz ingilizce diyelim.
Düzeltmeni hemen yaptım. Tekrar teşekkür ederim.
Rica ederim. Sorun sanırsam orjinal kaynaktan dolayı oluşmuş. Kılavuzlar genelde yazılım güncellemelerinden hemen sonra güncellenmiyorlar. ExtJs kılavuzunda da sanırsam eski Chrome sürümleri zamandında yazılan bir bölüm olduğundan dolayı öyle kalmış.
Bu arada ingilizce bilginizin benden kat kat iyi olduğuna şüphe yoktur
Saygılar.
Güncellemeleri zamanında yansıtamıyorlar. Güncelleme aktivitesi yoğun frameworklerde genelde böyle bir sıkıntı var haklısın. Teşekkürler
İyi çalışmalar.
Eline sağlık.
Sanırım, Ext.Loader localde çalışırken çalışmıyor. Sunucuya deploy etmeden çalıştıramadım örneği, şöyle bir hata aldım
Ext4 MVC makalesini bekliyoruz dört gözle
Osman dostum,
index.html dosyana ve dizin yapına bakma sansım varmı. Birde ext-debug.js yerine bootstrap.js i ekleyip denermisin index.html’ne.
Bende normalde localde calısan halini su şekilde test ettim hata almadım.
file:///kebab-revolution/client/desktop/index.html
Birseyler gozunden kacmıs olabılır mi ?
Bu arad MVC makalesini yazmak için sabırsızlanıyorum
Bu arada, evet, geçici olarak windows kullanıyorum. çok zor durumdayım, eheheh
Uygulama dizinini sıkıştırıp mail atarsan ınceler ve buradan feedbackte bulunabılırım seve seve.
Allah kurtarsın kardeş
linux’da denedim yine ayni hatayi aliyorum
http://yuxel.net/works/extjs-4.0.7-gpl/ornek/ bu çalışan hali, bu da tar’li hali http://yuxel.net/works/extjs-4.0.7-gpl/ornek.tar.gz
Osman yine windows’ camur atmak ıstemıyorum ama ben actıgımda sorunsuzca calıstı. Hatta direkt http://yuxel.net/works/extjs -4.0.7-gpl/ornek/ adresınden denedım. Ext.Loader tum sınıfları yukleyene kadar bekledı ardından da Hello paneli render oldu.
Hatta chrome kullanıyorsan adresı actıgında resources paneline gidip oradakı frames>works/extjs-4.0.7-gpl/ornek/>scripts bolumunu actıgında yukleme devam ederken bir bir sınıfların oraya geldiğini göreceksin. Hepsitamamlanınca da Viewport render oalcaktır.
Özetle: Çalışıyor.
http://yuxel.net/works/extjs-4.0.7-gpl/ornek/ zaten çalışıyor, bburada sunucuya deploy ettiğim için çalışıyor. ama ornek.tar.gz i local’e açınca çalışmıyor.
Osman kusura bakma. Dalgınıgıma geldi.
Extjs’ı yükleyemiyor localden. Relative path olayından kaynaklanıyor sanırım. ../’ seklinde kullanmamak lazım. Yada aynı level a taşırsan extjs ı sorun duzelecektır.
En temizi absolute path kullanmak.
Şu aşağıdakı iki örneği incelermisin;
Absolute:
extjs icin ext-all.css ve ext-debug.js satırlarında bulunan ./ yerine
http://cdn.sencha.io/ext-4.0.7-gpl/adresini eklersen duzelecektir
Burayan yazamıyorum http:// leri otomatık a takısına dönüştürüyor. Bende kızmaya başladım bu wp-ye ama
—-
Relative:
<html> <head> <title>Hello Ext JS 4</title> <link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css"> <script type="text/javascript" src="extjs/ext-all-debug.js"></script> <script type="text/javascript" src="app.js"></script> </head> <body></body> </html>Birde temaya gıcık olmaya basladım. Commentlerin renk tonu berbat okunmuyor yazarken
Kendımle celısıyorum ama el atmam laım bu temaya. Kusura bakmayın millet.
Aynı level’a taşıyınca yine çözülmedi.
Gecenin 12′si olmasa bi “known issue” mu diye bakıp, değilse hata raporu gönderecem, ama yarın 8′de kalkmam lazım
Teşekkürler ilgin için
Dostum bende aynı levelda calısan bır halı var. Sadece dedıgım gıbı extjs adında bır dızıni app.js ve index.html ile aynı dızıne açtım. Pathları duzenledım.
Sen sımdı bırak ugrasma yarın ben maıl atayım sana. Kurcalarsın. Eger sımdı atarsam kurcalamaya devam edıceksın. Bende de aynı huy var oradan bılıyorum
İyi çalışmalar.
ben o huy yüzünden bursumu kaybettim üniversitede
Ext Js öğrenimi diğer js frameworklere göre çok daha fazla zaman alıyor. Bunun nedeni masaüstünü webe taşıması. Türkçe kaynak sıkıntısı da cabası. Bu konu ile ilgili diğer makalelerinizi merakla bekliyoruz.
LookUpEdit türü bir araç var mı extjs içersinde??
Merhaba bahsettiğiniz “LookUpEdit” kavramından anladığım Combobox’daki verileri statik olarak değil de veri tabanından çekmek istediğiniz ise. Ex JS datastore’larını ve combobox’ın ‘remote’ ozelliğini kullanarak combobox’ın listesindeki verileri bir ajax isteği ile sunucunuzdan doldurabilirsiniz.
Aslında Combobox’ların sağında bulunan butonları da single veya twin olarak düzenleyebiliyorsunuz. Yani combonun sonunda bulunan aşağı okun hemen yanına bir de “…” seklide icon yapıp buna tıkladıgınızda acılan bir window dialogda basit bir list view getirip yine combobox’ın kullandıgı datastore aracılıgı ıle bu listeyi doldurup ilgili kaydı secerek dialogu kapatırken combobox’ı da secilen kayıtla setleyebilirsiniz.
Şu ornek http://cdn.sencha.io/ext-4.0.7-gpl/examples/form/forum-search.html ve
Şuradaki http://cdn.sencha.io/ext-4.0.7-gpl/examples/index.html diğer örnekler size fikir verebilir.
List view ornegi; http://cdn.sencha.io/ext-4.0.7-gpl/examples/grid/list-view.html
Trigger field: http://cdn.sencha.io/ext-4.0.7-gpl/docs/index.html#!/api/Ext.form.field.Trigger
Aynı zamanda http://cdn.sencha.io/ext-4.0.7-gpl/docs/index.html#!/api/Ext.form.field.ComboBox-cfg-queryMode api dokumantastonuna da bir göz atınız.
Bu arada DevExpress ile mi ilgileniyorsunuz ?
İyi çalışmalar.