9
votes

Comment générer des fonctions JavaScript globales et nommées sur Coffeescript, pour le script Google Apps

Je voudrais écrire des scripts JavaScript pour script Google Apps Utiliser Coffeescript, et je «M Avoir des difficultés à générer des fonctions dans la forme attendue.

Le script Google Apps attend un script contenant des fonctions de niveau supérieur, nommée. (Je peux utiliser la mauvaise terminologie, alors je vais illustrer ce que je veux dire avec des exemples ...) p>

Par exemple, cette fonction est heureusement reconnue par Google Apps Script: P>

var nonTriggerableFunction;

nonTriggerableFunction = function() {
  // ...
};


0 commentaires

4 Réponses :


3
votes

s'avère que cela peut être effectué à l'aide d'une seule ligne de JavaScript incorporé pour chaque fonction.

E.g. Ce CoffeScript: p> xxx pré>

... produira ce JavaScript lors de l'appelant le compilateur de café avec l'option "Bare" (interrupteur Bare): P>

var myNonTriggerableFunction;

myNonTriggerableFunction = function() {
  return Logger.log("Hello World!");
};

function myTriggerableFunction() { myNonTriggerableFunction(); };


0 commentaires

1
votes

Cela devrait vous donner une fonction globale nommée (oui, c'est un petit hacky, mais beaucoup moins que l'utilisation de backticks): xxx


4 commentaires

Cela ne semble pas générer une fonction globale nommée. C'est ce qu'il produit, lors de l'utilisation du commutateur -b: (fonction (fonction () {return this.triggerdfunction = (fonction (Fonction () {Fonction Triggerable fonction (arg1, arg2) {} retour TRGGERAdFunction;}) ();


Avez-vous exécuté le code dans un navigateur? La fonction est globale car elle est jointe au contexte global. Et il est nommé: triggertablefunction.name === "Triggerablefunction" . Bien sûr, cela ne génère pas de déclaration de fonction, mais je pense que ce n'est pas ce qui a été demandé.


Le code a couru dans le moteur de script Google Apps plutôt qu'un navigateur. J'avais vraiment demandé comment générer une déclaration de fonction, que le moteur de script Google Apps semble exiger. La solution de contournement utilisée par 'gmail-gtd-bot' (utilisant des tiques arrière) a fonctionné pour moi.


Je dois joindre une fonction à l'espace de noms global afin que je puisse l'appeler après une charge de page PJAX partielle. Cela a fonctionné pour moi.



15
votes

Coffeescript ne vous permet pas de créer quelque chose dans l'espace de noms global implicitement; Mais vous pouvez le faire en spécifiant directement l'espace de noms global.

window.someFunc = (someParam) -> 
    alert(someParam)


1 commentaires

Cela crée une fonction anonyme, pas nommée. La fonction anonyme est ensuite affectée à quelque peu. Son évident si vous mettez un point d'arrêt dans votre nouvelle fonction et regardez la trace de la pile.



1
votes

Juste Utilisez @ dans le script, exemple de mon code: xxx

Il sera compilé dans: xxx

this = window ce cas, donc sa fonction globale


0 commentaires