2012-01-30 3 views
7

CoffeeScriptを使用してGoogle Apps ScriptのJavascriptスクリプトを作成したいと思います。Google Appsスクリプト用のcoffeescriptでグローバルな名前付きjavascript関数を生成する方法

Google Apps Scriptには、スクリプトにトップレベルの名前付き機能が含まれている必要があります。 (私は間違った用語を使用することができるので、私は...私は例で何を意味するか説明します)。たとえば

を、この関数は喜んでGoogle Appsのスクリプトによって認識されています

function triggerableFunction() { 
    // ... 
} 

...この機能ではありませんしながら、(それが解析されますが、あなたはそれをトリガーすることができませんではないでしょう):

var nonTriggerableFunction; 

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

私はCoffeeScriptので、私が得ることができるよ最も近いがあることを見つけました上記のnonTriggerableFunctionフォーム。上記のtriggerableFunctionのような名前付き関数を生成する最良の方法は何ですか?

をコンパイルする際に、すでに 'bare'オプション(-bスイッチ)を使用していますが、トップレベルの機能安全ラッパーはありません。

CoffeeScriptとGoogle App Scriptを組み合わせたWebで見つかった1つのプロジェクトは、Gmail GTD Botです。これは、バックティックの組み合わせを使用して、ユーザーに手作業でいくつかの行を削除するよう求めているようですコード。 (の末尾とREADMEの「インストール」セクションを参照してください)。私はもっ​​とシンプルでクリーンなソリューションを望んでいます。

答えて

3

これは、機能ごとにembedded Javascriptの1行を使用して行うことができます。

など。このCoffeeScriptの '裸' オプション(-bスイッチ)とコーヒーコンパイラを呼び出すときに

myNonTriggerableFunction = -> 
    Logger.log("Hello World!") 

`function myTriggerableFunction() { myNonTriggerableFunction(); }` 

は...、このJavaScriptを生成します:

var myNonTriggerableFunction; 

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

function myTriggerableFunction() { myNonTriggerableFunction(); }; 

上記の例では、Google AppsのスクリプトはmyTriggerableFunctionを直接トリガーすることができます。

1

これはあなたにグローバルという名前の関数を与えるべきである(はい、それは少しハックだが、そのはるかに少ない使用してバッククォート):

# wrap in a self invoking function to capture global context 
do -> 
    # use a class to create named function 
    class @triggerableFunction 
    # the constructor is invoked at instantiation, this should be the function body 
    constructor: (arg1, arg2) -> 
     # whatever 
+0

グローバルな名前付き機能を生成していないようです。 -bスイッチを使用する場合は、それが生成するものである: (関数(){ 戻りthis.triggerableFunction =(関数(){ 関数triggerableFunction(ARG1、ARG2){} 戻りtriggerableFunction; } )(); })(); – mattbh

+0

ブラウザでコードを実行しましたか?この関数は、グローバルコンテキストに関連付けられているため、グローバルです。そして、それは 'triggerableFunction.name ===" triggerableFunction "という名前です。もちろん、それは関数ステートメントを生成しませんが、私はそれが尋ねられたものではないと信じています。 – Adrien

+0

コードはブラウザではなくGoogle Apps Scriptエンジン内で実行されました。 Google Apps Scriptエンジンに必要と思われる関数文を生成する方法を実際に尋ねていました。 'gmail-gtd-bot'(バックティックを使用)で使用されていた回避策が私のために働いていました。 – mattbh

11
のCoffeeScriptを使用すると、暗黙的にグローバル名前空間で何かを作成することはできません

。グローバルな名前空間を直接指定することでこれを行うことができます。

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

これは名前のない関数を作成します。次に、無名関数がsomeFuncに代入されます。新しい関数にブレークポイントを設定し、スタックトレースを見れば明らかです。 –

関連する問題