0

我正在为基于类的 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

在我添加最后一行之前(我偶然发现的一个解决方案),插件的初始构造运行良好,但在连续的方法调用中,jQueryeach循环有时无法遍历每个元素。

this.size()在循环外检查each返回了正确的值,在循环外检查单个元素看起来也很好。但在循环内部,有时会以我无法辨别的模式跳过元素。

就像我说的,通过添加最后一行来解决问题。(也许以某种方式传递给函数的返回值很each重要?)我的问题不是“我该如何解决这个问题?” 但是“为什么会这样?”

4

1 回答 1

3

从传递给的回调函数返回 falseeach将跳出循环。我还没有验证,但也许 jQuery 也会破坏除undefined.

由于在 CoffeeScript 中存在隐式返回,因此您可能从回调中返回错误甚至错误的内容,具体取决于其中执行的操作。

为避免任何问题,只需在最后更改datatrue

于 2013-09-23T21:37:08.023 回答