Archiv verlassen und diese Seite im Standarddesign anzeigen : Kontext anzeigen?
Hi,
mir kommt es so vor, als waere ich der einzige, der mit ActionScript Probleme hat. :(
Today's Problem:
Wie kann man sich den aktuellen 'Kontext' anschauen, bzw. Informationen zum Object, welches gerade (this) verwendet wird?
Vielen Dank. :)
Um das mal etwas genauer zu Beschreiben:
class bla {
var so:SharedObject;
function bla() {
so.onSync = function(list) {
trace("blubb");
}
}
}
ich will aus der onSync Funktion eine Methode aufrufen, welche sich in 'bla' befindet. Allerdings funktioniert das weder mit 'this.' noch direkt. :(
Ich koennte eine Klasse schreiben, die das SharedObject erweitert, aber ich weiss nicht, ob das so funktioniert. :(
Danke
mnemonic
12.10.2006, 11:29
Dann musst Du "so" eine Referenz auf Dein Objekt ankleben.
Beispiel:
function bla() {
so._myBla = this;
so.onSync = function(list) {
trace("blubb");
this._myBla.myFunc();
}
}
HTH
Jens
type error SharedObject have no field _myBla
:(
mnemonic
12.10.2006, 11:58
Ach ja, ich erinnere mich dunkel, dass Du ja dieses SWIFT-Dingens benutzt...
Mag ja nette Features haben, aber AS war noch nie strikt getypt, von daher sehe ich das Feature eher als Klotz am Bein...
Naja, anyway, versuchs mal mit:
function bla() {
so["_myBla"] = this;
so.onSync = function(list) {
trace("blubb");
this["_myBla"]["myFunc"]();
}
}
Ansonsten bietet sich noch Object.addProperty() an.
Perfekt. Vielen Dank. :)
Dieses SWIFT-Dingens ist teilweise etwas umstaendlich, aber wenn du wirklich Anwendungen in Flash entwickeln willst ist es definitiv besser, da du den Bildschrim nicht mit Flash-Controls/Libraries etc. zugemauert hast, sondern mit einem Text Editor deiner Wahl coden kannst. ;)
So mach man das auch nichtmehr. Man benutzt dazu einen Delegate:
class com.gencha.Delegate {
public static function create(target:Object, handler:Function):Function {
// Get any extra arguments for handler
var extraArgs:Array = arguments.slice(2);
// Create delegate function
var delegate:Function = function() {
// Get reference to self
var self:Function = arguments.callee;
// Augment arguments passed from broadcaster with additional args
var fullArgs:Array = arguments.concat(self.extraArgs, [self]);
// Call handler with arguments
return self.handler.apply(self.target, fullArgs);
};
// Pass in local references
delegate.extraArgs = extraArgs;
delegate.handler = handler;
delegate.target = target;
// Return the delegate function.
return delegate;
}
}
Benutzen tut man das Ganze dann so:
m_XMLObject.onLoad = Delegate.create(this, BuildTree);
Dann würde BuildTree aufgerufen werden, und innerhalb von BuildTree verweise this auf das Objekt, dass als erster Parameter übergeben wurde. Man kann übrigens hinter Buildtree noch beliebig viele Parameter anhängen.
class bla {
var so:SharedObject;
function bla() {
so.onSync = Delegate.create(this,test,"Hallo :D");
}
function test(message:String) {
trace (this.so + " " + message);
}
}
Der Delegate kommt wie eine Komponente in eine eigene .as Datei und wird über "import" eingebunden. Viel Spaß damit ;)
hmmm ... sieht nach einer sauberen Loesung aus. Allerdings bekomm ich statt der message nur Objekte zurueck. Gerade dabei die Ursache zu finden.
Danke
ok, habs gefunden. Die message wird nicht uebergeben, aber die weiteren Argumente der onSync() Funktion, was fuer mich wichtiger ist. ;)
Danke. :)
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.