jQuery ($) ->
eventMethod = if window.addEventListener then "addEventListener" else "attachEvent"
eventer = window[eventMethod]
messageEvent = eventMethod == if "attachEvent" then "onmessage" else "message"
# Listen to message from child window
eventer messageEvent, (e) ->
console.log "parent received message!: #{e.data}"
newHeight = e.data
$("#cf-iframe").css("height", newHeight)
, false
作为另一篇文章的后续文章。我上面的coffeescript编译得很好。然而它并没有表现出应有的表现。它似乎没有正确地将事件监听器附加到窗口。任何人都可以帮我解决原因吗?
答案 0 :(得分:3)
Niko是对的,这没有多大意义:
messageEvent = eventMethod == if "attachEvent" then "onmessage" else "message"
内联if
的优先级高于==
,其优先级高于=
,因此您实际上是在说:
messageEvent = (eventMethod == (if "attachEvent" then "onmessage" else "message"))
字符串"attachEvent"
是真实的,所以你实际上在说:
messageEvent = (eventMethod == "onmessage")
或更短的时间:
messageEvent = false
eventer
函数不知道如何处理布尔值,所以整个事情最终什么都不做。
我想你想这样说:
messageEvent = if eventMethod == 'attachEvent' then 'onmessage' else 'message'
或者您可以使用单个条件与if
表达式和destructured assignment一起完成所有操作:
[eventer, event] = if window.addEventListener
[window.addEventListener, 'message']
else
[window.attachEvent, 'onmessage' ]
eventer event, ...
这种方法将所有内容保持在一起,IMO可以产生更清晰的代码。