JeuWeb - Crée ton jeu par navigateur
[Résolu][CoffeeScript] Function is not defined - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu][CoffeeScript] Function is not defined (/showthread.php?tid=5748)

Pages : 1 2 3


[Résolu][CoffeeScript] Function is not defined - Maz - 16-10-2011

Bonjour,
j'essaie pour la première fois CoffeeScript 2.2.0 avec Ruby on rails 3.1, j'ai donc recodé tout mon script initialement en javascript avec coffeescript, mais j'avais seulement des "undefined function" en retour, j'ai donc essayer:
alert "message"
avec coffeescript. Le javascript final est:
(function() {
alert("map");
}).call(this);

Mais rien n'est exécuter! Ce qui expliques mes undefined function... Pourquoi?

Merci d'avance.


RE: [CoffeeScript]Rien ne veut s'exécuter. - Sephi-Chan - 16-10-2011

Où est placé de ficher CoffeeScript dans ton arborescence ?
Est-ce que le fichier CoffeeScript est chargé dans ton navigateur ?
Quels fichiers Javascript inclus-tu dans ton document HTML ?

Si tu crées un fichier foo.js.coffee dans app/assets/javascripts (ou dans vendor/assets/javascripts), il ne se passera rien, il devient juste disponible à l'URL /assets/foo.js.

Ensuite, deux possibilités : charger ce fichier depuis le HTML (avec javascript_include_tag "application"), ou bien l'inclure dans un package.

Quand tu crées une application Rails 3.1, un package application existe déjà. Un package n'est qu'un fichier (en l'occurrence assets/javascripts/application.js) qui référence d'autres fichiers ou packages. C'est grâce à ça que quand tu vas sur l'URL /assets/application.js, tu as un seul fichier avec le code de tous les packages référencés.

Maintenant, pour que ton package inclue le contenu de ton nouveau fichier, il faut que tu lui ajoutes une clause require foo.


RE: [CoffeeScript]Rien ne veut s'exécuter. - Maz - 16-10-2011

(16-10-2011, 11:54 AM)Sephi-Chan a écrit : Est-ce que le fichier CoffeeScript est chargé dans ton navigateur ?
Quels fichiers Javascript inclus-tu dans ton document HTML ?

Oui ils sont correctement inclus. Mais j'ai trouvé la solution. En fait je suis toujours sur mon truc en SVG, donc il ne faut pas utiliser javascript_include_tag car il cré une balise:
Code :
<script type="text/javascript" />
Alors que j'avais besoin de:
Code :
<script type="text/ecmascript" />

Je me suis donc créé un helper adéquat:
module ApplicationHelper
def ecma_include_tag(source)
path = ecma_path(source)
raw "<script type=\"text/ecmascript\" xlink:href=\"#{path}\" />"
end

def ecma_path(source)
javascript_path(source)
end
end

Pour ceux que ça à qui ça peut servir.


RE: [CoffeeScript] Rien ne veut s'exécuter - Sephi-Chan - 16-10-2011

Ok ! Il aurait été pertinent de donner le contexte dès le début. Smile
Il arrive souvent qu'on trouve une solution quand on pose clairement un problème.


RE: [Résolu][CoffeeScript] Rien ne s'exécute quand le script est chargé dans un SVG - Maz - 16-10-2011

Finalement ça n'as pas résolu mon soucis -_- j'ai toujours ces undefined function.

Mon alert "message" est bien exécuté au chargement du fichier, mais acune de mes fonctions n'est déclaré. J'ai pourtant essayer au plus simple:
show_tooltip = (evt) -> alert "bip"
<rect width="300" height="100" style="fill:rgb(0,0,255);stroke-width:1;stroke:rgb(0,0,0)" onclick="show_tooltip(evt)" />



RE: [CoffeeScript]Function is not defined - Sephi-Chan - 16-10-2011

C'est parce que CoffeeScript scope tout dans une closure. Pour définir une variable globale, il faut faire :


window.foo = (foo, bar)->
alert "#{foo} #{bar}"

Lis la documentation des outils que tu utilises !! CoffeeScript, il y a un paragraphe "Lexical Scoping and Variable Safety". D'autant plus quand ça tient sur une foutue page…


RE: [CoffeeScript]Function is not defined - Maz - 16-10-2011

(16-10-2011, 01:59 PM)Sephi-Chan a écrit : C'est parce que CoffeeScript scope tout dans une closure. Pour définir une variable globale, il faut faire :


window.foo = (foo, bar)->
alert "#{foo} #{bar}"

Lis la documentation des outils que tu utilises !! CoffeeScript, il y a un paragraphe "Lexical Scoping and Variable Safety".

Si on devait lire les docs de A à Z avant d'utiliser un outil, je crois que je serais encore en train d'apprendre le HTML :$

J'ai cherché (depuis 12h33 si on se fie à ma dernière réponse). Et je viens juste de tomber sur ceci.


RE: [Résolu][CoffeeScript]Function is not defined - Sephi-Chan - 16-10-2011

Prétexte bidon. On sait tous les deux que tu ne lis pas les documentations, même quand elles tiennent sur une malheureuse petite page. Je te l'ai montré avec la plupart de tes questions sur Rails et encore maintenant. Edit : C'est pas un crime, ça s'apprend. Smile

Et ma réponse solutionne ton problème de variables non définies, inutile de te compliquer. Smile


RE: [Résolu][CoffeeScript]Function is not defined - Maz - 16-10-2011

(16-10-2011, 02:38 PM)Sephi-Chan a écrit : Et ma réponse solutionne ton problème de variables non définies, inutile de te compliquer. Smile
Oui, mais je préfère utiliser @mafonction = (parametre) -> instruction.

M'enfin, de toute manière maintenant je fait fasse à un autre problème, mais je vais pas en parler, on va dire que j'ai pas lu la doc Confusediffle:.


RE: [Résolu][CoffeeScript]Function is not defined - Sephi-Chan - 16-10-2011

(16-10-2011, 02:52 PM)Maz a écrit : M'enfin, de toute manière maintenant je fait fasse à un autre problème, mais je vais pas en parler, on va dire que j'ai pas lu la doc Confusediffle:.

Avais-tu lu celle de CoffeeScript ? Smile

J'aime beaucoup aider les gens sinon je ne serais pas sur JeuWeb depuis tout ce temps. Seulement, c'est plus sympa d'aider les gens à régler de vrais problèmes, et pas seulement à compenser leur manque d'attention ou leur flemme de lire. Wink