2016-02-03 2 views
0

J'utilise mootools 1.6. J'ai basé mon code sur leur didacticiel mais lorsque j'essaie de l'exécuter, la fonction initialize de ma sous-classe n'est pas invoquée. Au lieu de cela, il va directement à la fonction initialize de la classe parente. J'ai essayé le point d'arrêt à l'intérieur de la fonction de la sous-classe initialize mais ça ne va vraiment pas là-bas. En fait, mes fonctions supplémentaires sont également indéfinies. C'est comme si seules les fonctions de la classe parente sont créées. :(Mootools 1.6 La méthode d'initialisation de la sous-classe n'est pas appelée

Voici mon exemple de code:
parent.js

var Parent = new Class({ 

    initialize: function(){ 
     alert("parent"); 
    }, 
    ... 

}); 


child.js

var Child = new Class ({ 
    Extends: Parent, 
    initialize: function() { 
     this.parent(); 
     alert("child"); 
    }, 
    ... some additional functions 
}); 


1.) Notez qu'ils sont dans des fichiers différents js.
2.) Ces fichiers sont pré-chargés par cocos2d-js

... 
    "src/controllers/parent.js", 
    "src/controllers/child.js", 
    ... 
+0

Je ne pense pas qu'il y ait un problème avec '1.6' Vérifiez ici.... https: // jsfidd le.net/otdfddyd/ mais peut-être que vous avez un problème avec le chargeur que vous utilisez. Pouvez-vous adapter mon jsFiddle pour reproduire votre problème? – Sergio

+0

désolé je suis nouveau à javascript. Cela fera-t-il une différence si je les mets tous dans un seul fichier? Mes objets sont dans des fichiers différents. – cessmestreet

+0

Salut Sergio, je sais déjà ce qui cause le problème. J'avais un autre fichier, child2.js utilisant le même nom d'objet pour l'enfant. Je n'utilise plus ce fichier mais comme il est listé dans les ressources après child.js, il redéfinit l'objet. Et c'est pourquoi ça ne va pas à l'initialisation de la classe enfant. Je suis désolé pour ça. Merci quand même pour vôtre aide! – cessmestreet

Répondre

2

j'ai pu résoudre ce problème. Il n'y a pas de problème avec Mootools. C'était comme ça que je l'ai utilisé. Je l'affiche pour les personnes qui pourraient rencontrer le même problème.

J'ai 3 fichiers js.

parent.js 
child.js 
orphan.js (calling it orphan hahaha) 

Ces 3 fichiers sont ajoutés à project.json dans cet ordre. Je n'utilise pas orphan.js. Je pensais l'avoir déjà retiré de la liste mais j'avais tort. :(

intérieur orphan.js, est une classe. Cette classe utilise le même nom que la classe à l'intérieur child.js. Il est vide et est tout simplement d'étendre le parent. Ce qui est arrivé était, il a redéfini l'objet car il est chargé après child.js. I a changé sa commande pour voir si elle utilisera la déclaration child.js à la place et en effet, elle l'a fait.Mais ce n'est pas la solution.J'ai juste utilisé pour prouver qu'il a été redéfini.La solution était de supprimer ce fichier de la source/assurez-vous que les classes ont le même nom

Whew fausse alarme

+1

Il n'y a pas de valeur dans cette question ou réponse car elle n'est pas correctement étiquetée et ne met pas en évidence comment vous chargez vos fichiers de sorte qu'il va simplement envoyer les gens dans le mauvais sens - il n'y a rien de mal avec l'héritage de classe mootools. –

+0

Je suis désolé mais je n'ai pas votre commentaire. J'ai déjà informé dans ma question que je suis en train de précharger les fichiers en utilisant cocos2djs. Pour cocos2djs, vous devez lister vos fichiers dans le tableau des ressources. – cessmestreet