Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用库获取CoffeeScript中的回调_Javascript_Youtube Api_Coffeescript_Dom Events - Fatal编程技术网

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将编译