PDA

Volledige versie bekijken : vanuit een Class een List op de stage vullen


Robin
%Europe/Berlin %760 %2005, 19:14
Ik heb op m'n stage een list component staan...
Ik ben een Class aan het schrijven en wil deze List vullen met een resultset (ontvangen vanuit amf)

Het valt me echter op dat ik vanuit de Class de list niet gevuld krijg. :S

class Testje()
{
..
private var listDataProvider:Array;
private var __root:MovieClip;
..
public function Testje(owner)
{
var __root = owner;
selectAllTitles()
}
public function selectAllTitles():Void
{
_pc = _service.selectAllTitles();
_pc.responder = new RelayResponder(this, "selectAllTitles_Result", "selectAllTitles_Fault");
}
private function selectAllTitles_Result(re:ResultEvent):Void
{
listDataProvider = [];
__root.index_cList.dataProvider = listDataProvider;
for (var i = 0; i<4; i++) {
listDataProvider.addItem({label:"label", data:"data"});
}
}
}

Dit is niet de gehele class, maar dit is ook niet nodig.. het gaat erom dat ik vanuit de class de list niet gevuld krijg.. Doe ik het vanaf de stage zonder __root, dan doet ie het wel...

selectAllTitles_Result wordt gweoon uitgevoerd en als ik vanuit daar re.result trace doet deze het ook... "label" en "data" zijn even als voorbeeld.. Deze worden vervangen door db_entries...

Robin
%Europe/Berlin %821 %2005, 20:42
Ok, ik ben erachter dat addItem() geen method is van een array..
Toch raar dat dit het voorbeeld is van List.dataProvider in de Flash Help:

myDP = new Array();
list.dataProvider = myDP;

for (var i=0; i<accounts.length; i++) {
// these changes to the data provider will be broadcast to the list
myDP.addItem({label: accounts[i].name,
data: accounts[i].accountID});
}

Hier maar de hele class:
import mx.remoting.debug.NetDebug;
import mx.remoting.Service;
import mx.remoting.PendingCall;
import mx.rpc.FaultEvent;
import mx.rpc.ResultEvent;
import mx.rpc.RelayResponder;
import mx.controls.Alert;
import mx.controls.List;
class Ninas {
private var _gateway_url:String;
private var _service_url:String;
private var _service:Service;
private var _pc:PendingCall;
private var __root:MovieClip;
//
public function Ninas(owner:MovieClip) {
trace("INFO: Ninas constructor initiated");
trace("---------------------------");
var _gateway_url = "mijnGateWayUrl"; //echte url even weggelaten
var _service_url = "Ninas";
var __root = owner;
_service = new Service(_gateway_url, null, _service_url, null, null);
selectAllTitles();
}
/************************************************** ************************************************** *********
* SELECT ALL TITLES
************************************************** ************************************************** *********/
public function selectAllTitles():Void {
trace("INFO: selectAllTitles() Initialized");
_pc = _service.selectAllTitles();
_pc.responder = new RelayResponder(this, "selectAllTitles_Result", "selectAllTitles_Fault");
}
private function selectAllTitles_Result(re:ResultEvent):Void {
trace("ResultEvent: selectAllTitles_Result Initialized");
for (var i=0;i<re.result.items.length;i++){
trace("ID:"+re.result.items[i].ID+" | label:"+re.result.items[i].title); //DIT DOET HET PERFECT
__root.index_cList.addItem({label:re.result.items[i].title,data:re.result.items[i].ID}); //DIT WIL IE DUS NIET DOEN
}
}
private function selectAllTitles_Fault(fe:FaultEvent):Void {
Alert.show("Code : "+fe.fault.faultcode+" "+fe.fault.faultstring, "Service fault");
}
/************************************************** ************************************************** *********
* SELECT Story
************************************************** ************************************************** *********/
public function selectStory($Story_id:Number):Void {
}
/************************************************** ************************************************** *********
* SELECT Reactions
************************************************** ************************************************** *********/
public function selectReactions($Story_id:Number):Void {
}
public function insertReaction($name:String, $email:String, $text:String) {
}
}


Ik word helemaal gek hier

Robin
%Europe/Berlin %830 %2005, 20:55
AAAAAAAAAAAAAAAARGH

OK, DE FOUT IS:

Omdat ik de scope mee wil geven, zorg ik in de constructor dat de __root wordt aangemaakt..
MAAR omdat ik de root al aangemaakt had bij het declareren van m'n variabelen hoef ik hem alleen maar te vullen.

In plaats van :var __root = owner; Moet het dus gewoon het volgende zijn:__root = owner;

Hier heb ik dus 3 á 4 uur op vast gezeten....