Javascript 解析参数&;CoffeeScript中的匿名函数
如何将此函数转换为与coffeescript兼容的版本 我的主要问题是fb.login。。然而,我尝试我似乎总是失去任何一个参数或权限Javascript 解析参数&;CoffeeScript中的匿名函数,javascript,facebook,coffeescript,Javascript,Facebook,Coffeescript,如何将此函数转换为与coffeescript兼容的版本 我的主要问题是fb.login。。然而,我尝试我似乎总是失去任何一个参数或权限 function promptLogin(login_level, callback) { var cbk = callback; FB.login(function(response) { if (response.session) { if (response.perms) {
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
谢谢所有回答的人。我希望这能帮助别人
亲切问候,
Gareth这是未经测试的,但我认为以下方法应该有效:
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
A
最后一行的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
每个函数末尾的额外
返回值
s可能重要,也可能不重要,这取决于API。只需注意您的隐式返回。这将编译成看起来功能等效的代码,其优点是要短得多。我建议使用coffeescript实时编译器进行测试
promptLogin = (login_level, callback) ->
FB.login (response) ->
callback response.session and response.perms, response
return
, perms:'email,publish_stream'
return
根据这些函数的返回值是否重要,返回可能是不必要的。当我获取js代码片段并想要 快速转换咖啡脚本 然后迭代出明显的
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"
不幸的是,这仍然没有在权限中解析:(我试图将第二个(可读性最高)示例应用到我的脚本中,但它只是出现了错误:“response未定义”。PrompLogintwo=(login_level,cbk)->loginCbk=(response)->if response.perms和response.session cbk true,response else alert(“抱歉,您必须接受权限。”)cbk false,response options=perms:'email,publish_stream'FB.login loginCbk,options
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"