我正在为基于类的CoffeeScript jQuery插件编写一个基于这个方便模板的插件:https://gist.github.com/rjz/3610858
一切都很顺利。但是,当我注册插件时,最后会出现一些意外行为:
$.fn.extend markdownAsides: (option, args...) ->
@each ->
$this = $(this)
data = $this.data('markdownAsides')
if not data?
$this.data 'markdownAsides', (data = new MarkdownAsides(this, option))
if typeof option is 'string'
data[option].apply(data, args)
data # Plugin breaks without this line
在我添加最后一行(我纯粹意外发现的解决方案)之前,插件的初始构造工作正常,但是在连续的方法调用中,jQuery each
循环有时无法遍历每个元素。
检查this.size()
循环外的each
返回正确的值,并检查循环外的各个元素也看起来很好。但是在循环中,有时会跳过元素,这是我无法辨别的模式。
就像我说的那样,通过添加最后一行来解决问题。 (也许传递给each
的函数的返回值在某种程度上很重要?)我的问题不是“如何解决这个问题?”但“为什么这样做?”
答案 0 :(得分:3)
从传递给each
的回调函数返回false将导致循环中断。我还没有验证,但是除了undefined
之外,jQuery也可以打破任何虚假值。
因为在CoffeeScript中有一个隐式返回,你可能会从回调中返回一些falsey甚至false,具体取决于在其中执行的操作。
为避免出现任何问题,请在最后更改data
的{{1}}。