Javascript 使用库获取CoffeeScript中的回调
我正在使用在页面上嵌入视频。我调用Javascript 使用库获取CoffeeScript中的回调,javascript,youtube-api,coffeescript,dom-events,Javascript,Youtube Api,Coffeescript,Dom Events,我正在使用在页面上嵌入视频。我调用swfobject.embeddeswf,它将视频嵌入到页面中,它可以工作。加载完成后,API应该调用onYouTubePlayerReady。但我的问题是,我必须将回调放在类中的什么位置才能调用函数 这是我尝试过的代码,但它不起作用 class YouTube constructor: (@uid) -> youtube_video_container = $('<div/>', {
swfobject.embeddeswf
,它将视频嵌入到页面中,它可以工作。加载完成后,API应该调用onYouTubePlayerReady
。但我的问题是,我必须将回调放在类中的什么位置才能调用函数
这是我尝试过的代码,但它不起作用
class YouTube
constructor: (@uid) ->
youtube_video_container = $('<div/>', {
id: 'ytapiplayer'
}).appendTo(main);
params = { allowScriptAccess: "always" };
atts = { id: "myytplayer" };
swfobject.embedSWF("http://www.youtube.com/apiplayer?video_id=d9NF2edxy-M&version=3&enablejsapi=1", "ytapiplayer", "1280", "720", "8", null, null, params, atts);
onYouTubePlayerReady: (playerId) ->
alert "ready"
classyoutube
构造函数:(@uid)->
youtube\u视频\u容器=$(''{
id:‘ytapiplayer’
}).附录(主要);
params={allowScriptAccess:“始终”};
atts={id:“myytplayer”};
swfobject.embeddeswf(“http://www.youtube.com/apiplayer?video_id=d9NF2edxy-M&version=3&enablejsapi=1”、“ytapiplayer”、“1280”、“720”、“8”、null、null、params、atts);
onYouTubePlayerReady:(playerId)->
警报“就绪”
我认为用以下代码替换embedSWF调用可能有效:
swfobject.embedSWF("http://www.youtube.com/apiplayer?video_id=d9NF2edxy-M&version=3&enablejsapi=1", "ytapiplayer", "1280", "720", "8", null, null, params, atts, this.onYouTubePlayerReady);
给它一枪,让我知道它是否有效
# .coffee file swf
@swfobject.embedSWF "swf/flashContent.swf", "site-content",
"100%", "100%", "10.0.0.", false,
flashvars, params, attributes, -> callbackFn(@swfobject)
callbackFn = (evt) ->
console.log "--> callbackFn invoked #{evt}"
# do other stuff
修改只是意味着将它作为最后一个参数传递给它,它是你想把它看作回调函数的函数。
< P>我认为替换下面的代码的嵌入SWF调用可以起作用:swfobject.embedSWF("http://www.youtube.com/apiplayer?video_id=d9NF2edxy-M&version=3&enablejsapi=1", "ytapiplayer", "1280", "720", "8", null, null, params, atts, this.onYouTubePlayerReady);
给它一枪,让我知道它是否有效
# .coffee file swf
@swfobject.embedSWF "swf/flashContent.swf", "site-content",
"100%", "100%", "10.0.0.", false,
flashvars, params, attributes, -> callbackFn(@swfobject)
callbackFn = (evt) ->
console.log "--> callbackFn invoked #{evt}"
# do other stuff
修改只是意味着你把它作为最后一个参数,你想把它当作回调函数来考虑。
< P>从: 此外,任何包含YouTube播放器的HTML页面都必须实现名为onYouTubePlayerReady
的JavaScript函数。当播放器完全加载并且API准备好接收调用时,API将调用此函数
以及:
onYouTubePlayerReady(playerid)
当播放器已完全加载且API已准备好接收调用时调用。如果通过URL参数将playerapiid
传递给播放器,则它将被传递给此函数
因此,如果在URL的CGI参数中包含&playerapiid=X
,则调用onYouTubePlayerReady
时,该X
将成为playerid
所有这些都表明,onYouTubePlayerReady
是一个全局函数,而不是您选择的对象上的一个方法或一个您可以随意指定的回调。要使用CoffeeScript创建全局函数,请在窗口上创建一个属性
:
window.onYouTubePlayerReady = (playerid) ->
alert 'Ready'
您必须使用playerid
通过一些全局可访问的playerid到对象映射回溯到创建播放器的特定对象
即使是接口也基于名称而不是回调,因此您必须自己处理全局名称空间和路由问题。来自:
此外,任何包含YouTube播放器的HTML页面都必须实现名为onYouTubePlayerReady
的JavaScript函数。当播放器完全加载并且API准备好接收调用时,API将调用此函数
以及:
onYouTubePlayerReady(playerid)
当播放器已完全加载且API已准备好接收调用时调用。如果通过URL参数将playerapiid
传递给播放器,则它将被传递给此函数
因此,如果在URL的CGI参数中包含&playerapiid=X
,则调用onYouTubePlayerReady
时,该X
将成为playerid
所有这些都表明,onYouTubePlayerReady
是一个全局函数,而不是您选择的对象上的一个方法或一个您可以随意指定的回调。要使用CoffeeScript创建全局函数,请在窗口上创建一个属性
:
window.onYouTubePlayerReady = (playerid) ->
alert 'Ready'
您必须使用playerid
通过一些全局可访问的playerid到对象映射回溯到创建播放器的特定对象
甚至接口都是基于名称而不是回调的,因此您必须自己处理全局名称空间和路由问题。我认为我找到了一个很好的解决方案,可以让回调在swfObject库中工作,这与txominpelu的建议非常相似。似乎使用
->callbackFn
可以很好地工作,基本上创建一个匿名函数并返回回调?如果有人能让我明白为什么这一切都是错的,我将不胜感激。(第一次我通常是错的)
我正在使用swfobject.embedSWF
和callbackFn
在我手工编码的JavaScript文件中运行良好,我使用函数callbackFn(){}
来定义它。现在我试着转向咖啡脚本,它太棒了。所以CoffeeScript将编译callbackFn=function(){}代码>取而代之。我原来的swfObject.embedSWF与我回调的CoffeeScript编译版本不兼容
// original javascript file approach
swfobject.embedSWF( "swf/flashContent.swf", "site-content",
"100%", "100%", "10.0.0", false,
flashvars, params, attributes, callbackFn );
// original javascript callback
function callbackFn() {
log( "--> callbackFn invoked ");
// ... do stuff
}
我不熟悉咖啡脚本,我想你
我首先尝试使用一个匿名函数来代替可选的回调参数,该参数在。然后我想我可能可以得到类似的东西来使用咖啡脚本版本。这就是我的结局
# part of .coffee file
swfobject.embedSWF "swf/flashContent.swf", "site-content",
"100%", "100%", "10.0.0", false,
flashvars, params, attributes, -> callbackFn()
callbackFn = (evt) ->
console.log "--> callbackFn invoked #{evt}"
# do other stuff
# part compiled .js file
swfobject.embedSWF("swf/flashContent.swf", "site-content",
"100%", "100%", "10.0.0.", false,
flashvars, params, attributes, function() {
return callbackFn();
});
callbackFn = function() { ... }
我还研究了如何通过callbackFn传递事件,这看起来很有效
# .coffee file swf
@swfobject.embedSWF "swf/flashContent.swf", "site-content",
"100%", "100%", "10.0.0.", false,
flashvars, params, attributes, -> callbackFn(@swfobject)
callbackFn = (evt) ->
console.log "--> callbackFn invoked #{evt}"
# do other stuff
我认为我找到了一个很好的解决方案,可以让回调在swfObject库中工作,这与txominpelu的建议非常相似。似乎使用->callbackFn
可以很好地工作,基本上创建一个匿名函数并返回回调?如果有人能让我明白为什么这一切都是错的,我将不胜感激。(第一次我通常是错的)
我正在使用swfobject.embedSWF
和callbackFn
在我手工编码的JavaScript文件中运行良好,我使用函数callbackFn(){}
来定义它。现在我试着转向咖啡脚本,它太棒了。所以CoffeeScript将编译