2009-07-24 9 views
4

J'ai une méthode dans une classe MooTools à laquelle je veux accéder après avoir téléchargé un fichier avec AJAX (iFrame). Le Javascript est que la page se exécute iFrame lorsqu'il charge doit appeler la méthode de la classe, mais je ne parviens pas à y accéder en utilisant quelque chose comme: Nom de la classe: principale classe var a été initialisées dans: mymainAccès à une méthode MooTools Classe à l'extérieur de la classe

parent.window. myMain.myMethod parent.window.Main.myMethod

Est-ce encore possible? Si c'est comment je fais ça?

Répondre

10

La syntaxe que je préfère:

var MyClass = new Class({ 

    /* list regular non-static methods her as usual */ 

}); 

MyClass.staticMethod = function() 
{ 
    /* body of static function */ 
}; 

Les avantages que vous avez sont:

  • Vous pouvez appeler la méthode statique via MyClass.staticMethod() à l'intérieur et à l'extérieur de votre classe
  • Il est impossible de accède accidentellement au this-pointeur dans la méthode statique car il n'est pas disponible

Pour accéder à la méthode statique dans un cadre interne peut utiliser window.parent.MyClass.staticMethod();

+0

Est-il possible d'accéder de staticMethod aux méthodes courantes définies dans la nouvelle classe (...)? i.e .: 'MyClass.staticMethod = function() {this.privateMethod()}; ' –

+1

Non, ce n'est pas possible, voir le deuxième point de ma réponse. Les méthodes statiques peuvent uniquement accéder à d'autres méthodes statiques. Si vous avez besoin d'accéder 'this', créez une méthode régulière. – sebasgo

0

Cela fonctionne pour moi (iframes aussi).

Dans la fenêtre principale.

var T=new MyClass(); 

Dans Iframe (qui charge après T a été initialisé!)

window.parent.T.anyMethodOfMyClass() 
+0

Je continue à obtenir "window.parent.myMain undefined" – trobrock

0

Juste figured it out. Sur la page iFrame, j'ai besoin d'utiliser:

window.parent.Main.prototype.myMethod(); Il se peut que ce ne soit pas la bonne façon d'y accéder, mais cela fonctionne.

Questions connexes