|
DataProvider, ComboBox, DataGrid, List ve TileList bileşenlerine veri sağlamak için kullanabileceğini bir veri kaynağıdır. Bu bileşen sınıflarının her biri, bileşenin hücrelerini verilerle doldurmak için bir DataProvider nesnesi atayabileceğiniz
dataProvider
özelliğine sahiptir. Tipik olarak, veri sağlayıcı, Array veya XML nesnesi gibi bir veri koleksiyonudur.
DataProvider oluşturma
ComboBox, List ve TileList bileşenleri için, geliştirme ortamında
dataProvider
parametresini kullanarak bir DataProvider öğesi oluşturabilirsiniz. DataGrid bileşeninin birçok sütunu olabileceğinden ve dolayısıyla veri sağlayıcısı daha karmaşık olabileceğinden bu bileşenin Özellik denetçisinde bir dataProvider parametresi yoktur. DataGrid öğesinin yanı sıra bu bileşenler için de DataProvider oluşturmak üzere ActionScript kullanabilirsiniz.
dataProvider parametresini kullanma
Özellik denetçisinin veya Bileşen denetçisinin Parametreler sekmesinde dataProvider parametresini tıklatarak ComboBox, List ve TileList bileşenleri için basit bir veri sağlayıcı oluşturabilirsiniz.
Başlangıçta boş bir Array öğesi görüntüleyen değer hücresini çift tıklatırsanız, veri sağlayıcısı oluşturmak için birden çok etiket ve veri değeri girmenize olanak sağlayan Değerler iletişim kutusunu açarsınız.
dataProvider için Değerler iletişim kutusu
dataProvider bileşenine bir öğe eklemek için artı işaretini tıklatın. Bir öğeyi silmek için eksi işaretini tıklatın. Seçili öğeyi listede bir öğe yukarı taşımak için yukarı oku veya seçili öğeyi listede bir öğe aşağı taşımak için aşağı oku tıklatın. Aşağıdaki resimde, çocukların adlarının ve doğum tarihlerinin bir listesini oluşturan Değerler iletişim kutusu gösterilmektedir.
Verilerin yer aldığı Değerler iletişim kutusu
Oluşturduğunuz Array öğesi, etiket ve değer alanları çiftlerinden oluşur. Etiket alanları,
label
ve
data
iken, değer alanları da çocukların adları ve doğum tarihleridir. Etiket alanı, List öğesinde görüntülenen içeriği tanımlar, bu örnekte içerik çocukların adlarıdır. Sonuçta elde edilen ComboBox şöyle görünür:
DataProvider tarafından doldurulan ComboBox
Veri ekleme işlemini bitirdiğinizde, iletişim kutusunu kapatmak için Tamam'ı tıklatın. dataProvider parametresindeki Array öğesi şimdi oluşturduğunuz öğelerle doldurulur.
verilerin yer aldığı dataProvider parametresi
Bileşenin
dataProvider
özelliğine erişmek için ActionScript kullanarak oluşturduğunuz etiket ve veri değerlerine erişebilirsiniz.
ActionScript kullanarak DataProvider oluşturma
Bir Array veya XML nesnesinde veri oluşturup DataProvider yapıcısına
value
parametresi olarak nesneyi sağlayarak bir DataProvider oluşturabilirsiniz.
Not:
ActionScript 3.0'da, özellik bir DataProvider nesnesi olarak tanımlandığından ve yalnızca DataProvider türünde bir nesne alabildiğinden, bir Array veya XML nesnesini doğrudan bir dataProvider özelliğine atayamazsınız.
Aşağıdaki örnek, tek bir satırlar sütunu olan List bileşenini birçok çocuk adı ve doğum tarihiyle doldurur. Bu örnek,
items
Array öğesinde listeyi tanımlar ve DataProvider örneğini (
yeni DataProvider(öğeler)
) oluşturduğunda bunu parametre olarak sunup List bileşeninin
dataProvider
özelliğine atar.
import fl.controls.List;
import fl.data.DataProvider;
var aList:List = new List();
var items:Array = [
{label:"David", data:"11/19/1995"},
{label:"Colleen", data:"4/20/1993"},
{label:"Sharon", data:"9/06/1997"},
{label:"Ronnie", data:"7/6/1993"},
{label:"James", data:"2/15/1994"},
];
aList.dataProvider = new DataProvider(items);
addChild(aList);
aList.move(150,150);
Array öğesi, etiket ve değer alanları çiftlerinden oluşur. Etiket alanları,
label
ve
data
iken, değer alanları da çocukların adları ve doğum tarihleridir. Etiket alanı, List öğesinde görüntülenen içeriği tanımlar, bu örnekte içerik çocukların adlarıdır. Sonuçta elde edilen List şöyle görünür:
DataProvider tarafından doldurulmuş bir List öğesi
Kullanıcı üzerini tıklatıp listedeki bir öğeyi seçtiğinde, veri alanının değeri kullanılabilir duruma geçer ve bir
change
olayı başlatılır. Aşağıdaki örnek, kullanıcı List öğesinde bir ad seçtiğinde çocuğun doğum gününü görüntülemek için önceki örneğe bir TextArea (
aTa
) ve bir olay işleyici (
changeHandler
) ekler.
import fl.controls.List;
import fl.controls.TextArea;
import flash.events.Event;
import fl.data.DataProvider;
var aList:List = new List();
var aTa:TextArea = new TextArea();
var items:Array = [
{label:"David", data:"1/19/1995"},
{label:"Colleen", data:"4/20/1993"},
{label:"Sharon", data:"9/06/1994"},
{label:"Ronnie", data:"7/6/1993"},
{label:"James", data:"2/15/1994"},
];
aList.dataProvider = new DataProvider(items);
addChild(aList);
addChild(aTa);
aList.move(150,150);
aTa.move(150, 260);
aList.addEventListener(Event.CHANGE, changeHandler);
function changeHandler(event:Event):void {
aTa.text = event.target.selectedItem.data;
};
Şimdi kullanıcı List öğesinde bir çocuğun adını seçtiğinde, aşağıdaki resimde gösterildiği gibi çocuğun doğum günü TextArea bileşeninde görüntülenir. Bu,
changeHandler()
işlevi tarafından TextArea (
aTa.text
) öğesinin
text
özelliğinin seçili öğedeki veri alanının değerine (
event.target.selectedItem.data
) ayarlanmasıyla gerçekleştirilir.
event.target
özelliği, olayı tetikleyen nesnedir (bu durumda List).
List bileşeninin DataProvider öğesinden veri alanını görüntüleme
DataProvider öğesine metin dışında da veriler dahil edebilirsiniz. Aşağıdaki örnek, TileList öğesine veri sağlayan DataProvider öğesine MovieClip öğelerini dahil eder. Bu, MovieClip (renkli kutu) oluşturduktan sonra her bir öğeyi eklemek için
addItem()
öğesini çağırarak DataProvider bileşenini oluşturur.
import fl.data.DataProvider;
import flash.display.DisplayObject;
var aBox:MovieClip = new MovieClip();
var i:uint = 0;
var colors:Array = new Array(0x00000, 0xFF0000, 0x0000CC, 0x00CC00, 0xFFFF00);
var colorNames:Array = new Array("Midnight", "Cranberry", "Sky", "Forest", "July");
var dp:DataProvider = new DataProvider();
for(i=0; i < colors.length; i++) {
drawBox(aBox, colors[i]); // draw box w next color in array
dp.addItem( {label:colorNames[i], source:aBox} );
}
aTl.dataProvider = dp;
aTl.columnWidth = 110;
aTl.rowHeight = 130;
aTl.setSize(280,150);
aTl.move(150, 150);
aTl.setStyle("contentPadding", 5);
function drawBox(box:MovieClip,color:uint):void {
box.graphics.beginFill(color, 1.0);
box.graphics.drawRect(0, 0, 100, 100);
box.graphics.endFill();
Bir DataProvider nesnesini doldurmak için de XML verilerini (dizi yerine) kullanabilirsiniz. Örneğin, şu kod, verileri
employeesXML
adındaki bir XML nesnesine saklar ve sonra
DataProvider()
yapıcısı işlevinin değer parametresi olarak bu nesneyi iletir:
import fl.controls.DataGrid;
import fl.data.DataProvider;
var aDg:DataGrid = new DataGrid();
addChild(aDg);
var employeesXML:XML =
<employees>
<employee Name="Edna" ID="22" />
<employee Name="Stu" ID="23" />
</employees>;
var myDP:DataProvider = new DataProvider(employeesXML);
aDg.columns = ["Name", "ID"];
aDg.dataProvider = myDP;
Verileri önceki kodda olduğu gibi XML verilerinin nitelikleri olarak veya aşağıdaki kodda olduğu gibi XML verilerinin özellikleri olarak sağlayabilirsiniz:
var employeesXML:XML =
<employees>
<employee>
<Name>Edna</Name>
<ID>22</ID>
</employee>
<employee>
<Name>Stu</Name>
<ID>23</ID>
</employee>
</employees>;
DataProvider öğesi ayrıca kendisine erişip bu öğeyi işlemenizi sağlayan yöntemler ve özellikler kümesine de sahiptir. DataProvider içinde öğeler eklemek, kaldırmak, değiştirmek, sıralamak ve birleştirmek için DataProvider API'sini kullanabilirsiniz.
DataProvider öğesini işleme
addItem()
ve
addItemAt()
yöntemleriyle DataProvider bileşenine öğeler ekleyebilirsiniz. Aşağıdaki örnek, kullanıcının düzenlenebilir bir ComboBox bileşeninin metin alanına girdiği öğeleri ekler. Bu, ComboBox bileşeninin Sahne Alanı dışına sürüklendiğini ve bu bileşene
aCb
örnek adının verildiğini varsayar.
import fl.data.DataProvider;
import fl.events.ComponentEvent;
var items:Array = [
{label:"Roger"},
{label:"Carolyn"},
{label:"Darrell"},
{label:"Rebecca"},
{label:"Natalie"},
{label:"Mitchell"},
];
aCb.dataProvider = new DataProvider(items);
aCb.addEventListener(ComponentEvent.ENTER, newItemHandler);
function newItemHandler(event:ComponentEvent):void {
var newRow:int = event.target.length + 1;
event.target.addItemAt({label:event.target.selectedLabel},
event.target.length);
}
DataProvider yoluyla da bir bileşendeki öğeleri değiştirebilir ve kaldırabilirsiniz. Aşağıdaki örnek, iki ayrı List bileşenini (
listA
ve
listB
) uygular ve Sync etiketli bir Button öğesi sağlar. Kullanıcı Button öğesini tıklattığında, örnek
listB
içindeki öğeleri
listA
içindeki öğelerle değiştirmek için
replaceItemAt()
yöntemini kullanır.
listA
öğesi
listB
öğesinden daha uzun olursa, örnek,
listB
öğesine fazladan öğe eklemek için
addItem()
yöntemini çağırır.
listB
öğesi
listA
öğesinden daha uzun olursa, örnek,
ListB
öğesindeki fazladan öğeleri kaldırmak için
removeItemAt()
yöntemini çağırır.
// Requires the List and Button components to be in the library
import fl.controls.List;
import fl.controls.Button;
import flash.events.Event;
import fl.data.DataProvider;
var listA:List = new List();
var listB:List = new List();
var syncButton:Button = new Button();
syncButton.label = "Sync";
var itemsA:Array = [
{label:"David"},
{label:"Colleen"},
{label:"Sharon"},
{label:"Ronnie"},
{label:"James"},
];
var itemsB:Array = [
{label:"Roger"},
{label:"Carolyn"},
{label:"Darrell"},
{label:"Rebecca"},
{label:"Natalie"},
{label:"Mitchell"},
];
listA.dataProvider = new DataProvider(itemsA);
listB.dataProvider = new DataProvider(itemsB);
addChild(listA);
addChild(listB);
addChild(syncButton);
listA.move(100, 100);
listB.move(250, 100);
syncButton.move(175, 220);
syncButton.addEventListener(MouseEvent.CLICK, syncHandler);
function syncHandler(event:MouseEvent):void {
var i:uint = 0;
if(listA.length > listB.length) { //if listA is longer, add items to B
while(i < listB.length) {
listB.dataProvider.replaceItemAt(listA.dataProvider.getItemAt(i), i);
++i;
}
while(i < listA.length) {
listB.dataProvider.addItem(listA.dataProvider.getItemAt(i++));
}
} else if(listA.length == listB.length) { //if listA and listB are equal length
while(i < listB.length) {
listB.dataProvider.replaceItemAt(listA.dataProvider.getItemAt(i), i);
++i;
}
} else { //if listB is longer, remove extra items from B
while(i < listA.length) {
listB.dataProvider.replaceItemAt(listA.dataProvider.getItemAt(i), i);
++i;
}
while(i < listB.length) {
listB.dataProvider.removeItemAt(i++);
}
}
}
Ayrıca
merge()
,
sort()
ve
sortOn()
yöntemlerini kullanarak da DataProvider öğesini birleştirip sıralayabilirsiniz. Aşağıdaki örnek, iki DataGrid örneğini (
aDg
ve
bDg
) iki beysbol takımının kısmi görev listesiyle doldurur. Merge etiketine sahip bir Button öğesi ekler ve kullanıcı bunun üzerini tıklattığında, olay işleyici (
mrgHandler
)
bDg
görev listesini
aDg
görev listesiyle birleştirir ve sonuçta elde edilen DataGrid öğesini Ad sütununda sıralar.
import fl.data.DataProvider;
import fl.controls.DataGrid;
import fl.controls.Button;
var aDg:DataGrid = new DataGrid();
var bDg:DataGrid = new DataGrid();
var mrgButton:Button = new Button();
addChild(aDg);
addChild(bDg);
addChild(mrgButton);
bldRosterGrid(aDg);
bldRosterGrid(bDg);
var aRoster:Array = new Array();
var bRoster:Array = new Array();
aRoster = [
{Name:"Wilma Carter", Bats:"R", Throws:"R", Year:"So", Home: "Redlands, CA"},
{Name:"Sue Pennypacker", Bats:"L", Throws:"R", Year:"Fr", Home: "Athens, GA"},
{Name:"Jill Smithfield", Bats:"R", Throws:"L", Year:"Sr", Home: "Spokane, WA"},
{Name:"Shirley Goth", Bats:"R", Throws:"R", Year:"Sr", Home: "Carson, NV"}
];
bRoster = [
{Name:"Angelina Davis", Bats:"R", Throws:"R", Year:"So", Home: "Odessa, TX"},
{Name:"Maria Santiago", Bats:"L", Throws:"L", Year:"Sr", Home: "Tacoma, WA"},
{Name:"Debbie Ferguson", Bats:"R", Throws:"R", Year: "Jr", Home: "Bend, OR"}
];
aDg.dataProvider = new DataProvider(aRoster);
bDg.dataProvider = new DataProvider(bRoster);
aDg.move(50,50);
aDg.rowCount = aDg.length;
bDg.move(50,200);
bDg.rowCount = bDg.length;
mrgButton.label = "Merge";
mrgButton.move(200, 315);
mrgButton.addEventListener(MouseEvent.CLICK, mrgHandler);
function bldRosterGrid(dg:DataGrid){
dg.setSize(400, 300);
dg.columns = ["Name", "Bats", "Throws", "Year", "Home"];
dg.columns[0].width = 120;
dg.columns[1].width = 50;
dg.columns[2].width = 50;
dg.columns[3].width = 40;
dg.columns[4].width = 120;
};
function mrgHandler(event:MouseEvent):void {
aDg.dataProvider.merge(bDg.dataProvider);
aDg.dataProvider.sortOn("Name");
}
Daha fazla bilgi için,
Adobe® Flash® Professional CS5 için ActionScript® 3.0 Başvurusu
bölümündeki DataProvider sınıfına bakın.
|
|
|