[英]Parsing Arguments & Anonymous functions in 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'}
);
}
非常感謝...
加雷思
編輯
感謝您在下面提供的所有答案,有些工作沒有完成,有些導致了我其他問題。
我已經確定了各種解決方案的搭配:
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
謝謝所有回答的人。 希望這對其他人有幫助!
親切的問候,
加雷思
當我獲取js代碼片段並想要快速的coffeescript轉換時,我總是使用js2coffee。
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) ->
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"
直到最后你得到
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) ->
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'
當我遇到這些問題時,我要做的兩件事是:
在這種情況下,括號可以幫助:
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
常見問題解答 。
FB.login (response) ->
if response.perms and response.session
cbk true, response
# ...
, perms: 'email,publish_stream'
最后一行上的dedent +逗號可以解決問題。
為了便於閱讀,我絕對會命名為傳遞給FB.login
的回調:
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
可能無關緊要,具體取決於API。 只要注意您的隱性回報。
這可以編譯為功能上等效的代碼,並且具有更短的優勢。 我建議使用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
根據那些函數的返回值是否重要,返回可能是不必要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.