Я думаю, что нашел хорошее решение для получения обратного вызова для работы в библиотеке swfObject, которая очень похожа на предложение txominpelu. Похоже, что использование -> callbackFn
прекрасно работает, в основном создавая анонимную функцию и возвращая обратный вызов? Я был бы признателен, если бы кто-нибудь меня сразу понял, почему все это может быть неправильно.(Я обычно неправильно первый раз)
Я использую swfobject.embedSWF
с callbackFn
, который отлично работает в моей руке кодированный файл JavaScript, где я использую function callbackFn() {}
, чтобы определить его. Теперь я пытаюсь перейти к CoffeeScript, что так приятно. Таким образом, 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
}
Я новичок в CoffeeScript, и я думаю, что единственный раз, когда вы get named functions is with a class
Я начал пытаться анонимную функцию вместо необязательного параметра обратного вызова, который подробно на swfObject wiki. Затем я решил, что смогу получить что-то подобное для работы с версией CoffeeScript. Вот где я оказался.
# 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
Wow. Спасибо за большую помощь. Да, спасибо за подсказку о том, что 'addEventListener' тоже нуждается в строке. Я попытался сделать некоторый '@ onPlayerStateChanged' для другого обратного вызова, но это не сработало. Но все работает, когда я делаю 'window.onytplayerStateChange'. В целом, JS YouTube не очень хорошо разработан. – Alexis
@AlexisK: Да, API немного пахнет и затхлый. –
ah, 'window.onYouTubePlayerReady' был именно тем, что мне нужно, спасибо! – pruett