2011-06-24 14 views
2

この関数をcoffeescript互換のバージョンにするにはどうすればよいですか?CoffeeScriptの引数と匿名関数の解析

私の主な問題は...しかし、私は常に引数または権限のいずれかを失っているように見えるしてみてください。.. fb.loginである

最も評価
function promptLogin(login_level, callback) 
{ 
    var cbk = callback; 

    FB.login(function(response) { 
     if (response.session) { 
      if (response.perms) { 
       cbk(true, response); 
      } else { 
       cbk(false, response); 
       //showAlert("Please accept the permissions.", 'Error'); 
      } 
     } else { 
      cbk(false, response); 
      //showAlert("Please accept the permissions.", 'Error'); 
     } 
     }, {perms:'email,publish_stream'} 
    ); 
} 

...

ガレス下のあなたの答えのすべてのための

EDIT

おかげで、いくつかは、いくつかはしなかった働いていた、いくつかは私に他のISSUを引き起こしましたes。

私は、ソリューションのミックスと一致に定住しています

login: (permissions = '', callback) -> 
    responseHandler = (response) -> 

     if response.session 
      if permissions && permissions != '' 
       if permissions == response.perms 
        AP.log 'Login accepted - Permissions Accepted', response 
        callback true, response 
       else 
        AP.log 'Login rejected - Permissions Rejected', response 
        callback false, response 
      else 
       AP.log 'Login accepted - No Permissions', response 
       callback true, response     
     else 
      AP.log 'Login rejected', response 
      callback false, response 
     return 

    FB.login responseHandler, perms: permissions 

が答えたすべての人に感謝します。これが他人を助けることを願っています

敬具、

ガレス

答えて

0

私は間違いなくあなたが読みやすさのためにFB.loginに渡しているコールバックに名前を付けます。あなたの暗黙の返品に気をつけてください。

0

それはテストされていないのですが、私は次のように動作するはずだと思う:

promptLogin = (login_level, callback) -> 
    FB.login ((response) -> 
    if response.perms and response.session 
     cbk true, response 

    else 
     if not response.perms 
     cbk false, response 
     # showAlert ... 
     else # if not response.session 
     cbk false, response), 
    perms: 'email,publish_stream' 
+0

残念ながら、それはまだパーミッションで解析されません:( – ThinkGareth

0

私はこれらの問題が発生したとき、私は二つのことがあります:

  1. 多くの括弧を追加します。
  2. 各引数をローカル変数に入れます。

    promptLogin = (login_level, cb) -> 
    FB.login(((response) -> 
        cb response.perms and response.session, response), 
        perms: 'email, publish-stream') 
    

    と一時変数のヘルプ:

は、この場合は、ヘルプ括弧

promptLogin = (login_level, cb) -> 
    login = (response) -> cb response.perms and response.session, response 
    options = perms: 'email, publish-stream' 
    FB.login login, options 
+0

私は2番目の(最も読みやすい)例を自分のスクリプトに入れようとしましたが、それは単にエラーです: 'レスポンスは定義されていません'。 promptLoginTwo =(login_level、CBK) - > loginCbk =(レスポンス) - > \t \t場合response.permsとresponse.session \t \t \t CBK真、応答他 \t \t \t \t \t警告(」申し訳ありませんが、あなたは許可を受け入れなければならない」) \t \t \tは偽、応答 オプション=パーマCBK: '電子メール、publish_stream' FB.login loginCbk、オプションを – ThinkGareth

0

FAQ

FB.login (response) -> 
    if response.perms and response.session 
    cbk true, response 
    # ... 
, perms: 'email,publish_stream' 

最終行のdedent + commaがトリックします。 APIには、各関数の最後で

promptLogin = (login_level, callback) -> 
    responseHandler = (response) -> 
    if response.session 
     if response.perms 
     callback true, response 
     else 
     callback false, response 
     # showAlert 'Please accept the permissions.', 'Error' 
    else # no session 
     callback false, response 
     # showAlert 'Please accept the permissions', 'Error' 
    return 

    FB.login responseHandler, perms: 'email,publish_stream' 
    return 

余分return sがか重要でない場合がありますによって:

0

これは機能的に同等のコードに見えるものにコンパイルされ、はるかに短いという利点があります。このようなことをテストするには、http://jashkenas.github.com/coffee-script/のcoffeescriptリアルタイムコンパイラを使用することをお勧めします。

promptLogin = (login_level, callback) -> 
    FB.login (response) -> 
    callback response.session and response.perms, response 
    return 
    , perms:'email,publish_stream' 
    return 

これらの関数の戻り値が重要かどうかによって返品が必要ない場合があります。

7

私はjsスニペットをつかんでいつでも にすばやくコーヒー文字を変換したいと思っています。その後、

http://ricostacruz.com/js2coffee/

promptLogin = (login_level, callback) -> 
    cbk = callback 
    FB.login (response) -> 
    if response.session 
     if response.perms 
     cbk true, response 
     else 
     cbk false, response 
    else 
     cbk false, response 
    , perms: "email,publish_stream" 

、最終的にあなたが

promptLogin = (login_level, callback) -> 
    FB.login (response) -> 
     callback 
     if response.session then response.perms else false 
     response 
     , perms: "email,publish_stream" 
を得るまで再び明らか

promptLogin = (login_level, callback) -> 
    cbk = callback 
    FB.login (response) -> 
    if response.session 
     cbk response.perms, response 
    else 
     cbk false, response 
    , perms: "email,publish_stream" 

promptLogin = (login_level, callback) -> 
    FB.login (response) -> 
    if response.session 
     callback response.perms, response 
    else 
     callback false, response 
    , perms: "email,publish_stream" 

を繰り返します

+0

+1 js2コーヒー、素晴らしいリファレンス – rodowi