Anasayfa | Giriş Yapın | Üye Olun | Gökçe Kim? | İletişim
Gökçe’nin Web Güncesi (gwg)

Gökçe’nin Web Güncesi (gwg)

Welcome to darkside of the Source, we have cookies!

Gökçe’nin Web Güncesi (gwg) RSS Feed
 
 

ExtJS Radiogrouplar ve extend

Ext ile ilgili uzun zamandır yazmak istiyordum, biraz sert bir giriş olacak. Daha sonra javascript kosunda bilgili ve Ext’e hızlı bir başlangıç yapmak isteyenler için ne olduğunu, nasıl bir yapıya sahip olduğunu anlatırım.

Extend için kurban seçerken daha sonra işimize yarayacak bir component (komponent, parçacık.. her neyse) olsun istedim, yakın zamanda karşılaştığım bir soruna sahip, Radiogroup ‘u seçtim. Nitekim, getValue ve setValue nitelikleri, diğer componentların aksine (textfield, combobox, textarea vb) standart HTML’deki davranışları sergilemiyor. Ext’in diğer form araçlarıyla aynı prensipleri taşıması için kendisine setValue ve getValue ekleyeceğiz. Fakat öncelikle çıplak haline bakalım.

var form = new Ext.form.FormPanel({
        id:'gridForm',
        items: [
        {
            width:120,
            xtype: 'radiogroup',
            fieldLabel: 'My Groupradio',
            name:'groupradio',
            id:'groupradio',
            items: [
            {boxLabel: 'Radio 1 ', name: 'groupradio', inputValue: 1,checked:true},
            {boxLabel: 'Radio 2', name: 'groupradio', inputValue: 2},
            ]
        }]

});

Eğer Ext.getCmp(’groupradio’).getValue() yaparsak, malesef ‘1′ değerini alamayacağız. Çünkü Ext, radio işleyişlerinde, sadece seçili olana name vermekte ve bu objeleri taramadan hangisinin seçili olduğunu anlamamızı imkansızlaştırıyor. Daha da kötüsü, bu methodları kullanan form.loadRec() ve form.getValues/setValues() ile veri alıp/yerleştiremiyoruz. Bunun için Ext ile uyumlu çalışabilecek getValue ve setValue tanımlamamız gerekli:

var form = new Ext.form.FormPanel({
        id:'gridForm',
        items: [
        {
            width:120,
            xtype: 'radiogroup',
            fieldLabel: 'My Groupradio',
            name:'groupradio',
            id:'groupradio',
            getValue: function() {
            for( var i=0; i < this.items.length; i++ ) {
                if( this.items.items[i].checked ) {
                    return this.items.items[i],this.items.items[i].inputValue;
                }
            }
        },
        setValue: function(v) {
            for( var i=0; i < this.items.length; i++ ) {
                if( this.items.items[i].checked )
                this.items.items[i].setValue(false);
                if ( this.items.items[i].inputValue == v)
                this.items.items[i].setValue(true);
            }
         },
            items: [
            {boxLabel: 'Radio 1 ', name: 'groupradio', inputValue: 1,checked:true},
            {boxLabel: 'Radio 2', name: 'groupradio', inputValue: 2},
            ]
        }]

});

Artık getValue ve setValue methodlarımız olması gerektiği gibi çalışıyor. Fakat bunu bir de radiobox için standart haline getirirsek, blok kodlamadan kaçınmış olacağız. Zaten extend’in esprisi de burada:

gokceRadioGroup = Ext.extend(Ext.form.RadioGroup, {
        getValue: function() {
            for( var i=0; i < this.items.length; i++ ) {
                if( this.items.items[i].checked ) {
                    return this.items.items[i],this.items.items[i].inputValue;
                }
            }
        },
        setValue: function(v) {
            for( var i=0; i < this.items.length; i++ ) {
                if( this.items.items[i].checked )
                this.items.items[i].setValue(false);
                if ( this.items.items[i].inputValue == v)
                this.items.items[i].setValue(true);
            }
        }
    });
    Ext.ComponentMgr.registerType('radiogroup',gokceRadioGroup); //eski componentın üzerine yazmak için
    Ext.ComponentMgr.registerType('gokceradiogroup',gokceRadioGroup); //eskisini bozmak istemiyorsanız, başka bir xtype oluşturmak için

        /*Önerim, Component extendlerini ihtiyaçlarınıza göre bir veya birden fazla başka bir JS dosyasında toplamanız. */
    var form = new Ext.form.FormPanel({
        id:'gridForm',
        items: [
        {
            width:120,
            xtype: 'radiogroup', // = gokceradiogroup
            fieldLabel: 'My Groupradio',
            name:'groupradio',
            id:'groupradio',
            items: [
            {boxLabel: 'Radio 1 ', name: 'groupradio', inputValue: 1,checked:true},
            {boxLabel: 'Radio 2', name: 'groupradio', inputValue: 2},
            ]
        }]
});

Şimdilik bu kadar. Umarım ilerde bilmeyenlerin ExtJS ile arasını yapacak bir yazı yazmaya zamanım olur. Mutlu kodlamalar.

Technorati Tags: ,,

2 Yorum - “ExtJS Radiogrouplar ve extend”

  1. 1
    Murat Beşer:

    Mutlu kodlamalar :)

  2. 2
    Gökhan Aygün:

    ömrümü yedi extjs :P

Bir cevap bırakın


Additional comments powered by BackType