【问题标题】:Coffeescript and jQuery TypeErrorCoffeescript 和 jQuery 类型错误
【发布时间】:2012-01-23 04:59:34
【问题描述】:

我最近在使用带有 coffeescript 的 jquery 插件时遇到了一个小问题(如果有帮助的话,在 Rails 3.1 资产管道中)。我环顾四周,但无法真正弄清楚它为什么会这样。

那么,为什么这不起作用(谈论对 $('.overlaybox') 的角调用):

$ ->
  $('#slides').sortable
    axis: 'y'
    update: ->
      $.post($(this).data('update-url'), $(this).sortable('serialize'))

  $(".overlaybox").corner()

但这确实有效(从 jQuery 就绪的东西中取出角落调用):

$ ->
  $('#slides').sortable
    axis: 'y'
    update: ->
      $.post($(this).data('update-url'), $(this).sortable('serialize'))

$(".overlaybox").corner()

我一直收到一个

TypeError: 'undefined' is not a function (evaluating '$(".overlaybox").corner()')

如果我把它留在里面……也许我现在只是瞎了眼,但我不知道为什么我不能把它留在里面。甚至编译后的代码看起来也是合法的(至少在我看来是合法的;-))。

非常感谢您的时间和澄清。

马塞尔

更新 下面是一些相关代码:

# app/assets/javascripts/application.js
//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require jquery.Jcrop
//= require jquery.corner
//= require jqtextile
//= require_tree .

# app/assets/javascripts/slides.js
$ ->
  $(".overlaybox").draggable 
    containment: 'parent',
    drag: -> 
        offset = $(this).position()
        xPos = offset.left
        yPos = offset.top
        $('#slide_xpos').val(xPos)
        $('#slide_ypos').val(yPos)


  $('#slides').sortable
        axis: 'y'
    update: ->
        $.post($(this).data('update-url'), $(this).sortable('serialize'))

  $(".overlaybox").corner()

然后是视图 (app/views/slides/_form.html)。有趣的是,只要我将它从 jquery 文档就绪事件中取出,角落就可以工作。 我认为我在所有这一切的范围内遗漏了一些实质性的东西: 当我在角落的 $ -> 内执行 console.log 时,我得到一个未定义的。但是当我在 $ -> (实际上在下面)之外做同样的事情时,我得到了正确的输出并且它甚至在 jquery 之前就被触发了(当然)。但为什么它在 jQuery 块中不可用?这是我缺少的咖啡脚本的范围吗? (我现在用不同的插件也有同样的问题)

再次感谢!

这里也是编译后的 javascript 代码,如果有帮助的话

$(function() {
    console.log($('.overlaybox'));
    console.log($('.overlaybox').corner);
    $(".overlaybox").draggable({
      containment: 'parent',
      drag: function() {
        var offset, xPos, yPos;
        offset = $(this).position();
        xPos = offset.left;
        yPos = offset.top;
        $('#slide_xpos').val(xPos);
        return $('#slide_ypos').val(yPos);
      }
    });
    $('#slides').sortable({
      axis: 'y',
      update: function() {
        return $.post($(this).data('update-url'), $(this).sortable('serialize'));
      }
    });
    return $(".overlaybox").corner();
  });

【问题讨论】:

  • sortable 和这个有什么关系?有机会看到重现问题的最小案例吗?该错误表明当您尝试使用角落插件时未加载它,我希望第一个比第二个有更好的工作机会。
  • 嘿,我把可排序的代码留在那里,至少在 $ 中有一些代码 -> 我认为这可能更清楚,因为我还提到了我在谈论的那一行。但是,是的,根据我的分析器,角落插件肯定是在咖啡脚本代码之前加载的。对我来说,第一个例子也更有意义,但它不起作用。太奇怪了..
  • 你能看看$.fn.corner 看看里面有什么吗?可能有两件事要使用corner 名称吗?
  • 你能拿出一些相关的代码吗?
  • @island205 好的,我把它加到上面的 coe 中了。

标签: javascript jquery coffeescript


【解决方案1】:

嗯,问题是,我的 rails 公用文件夹中有一些预编译的资产(旧的东西),这对我的 jQuery 调用有点混乱。清除它,吸取教训,现在一切正常。

无论如何,非常感谢大家,非常感谢您的帮助!

【讨论】:

  • 听起来你的 jQuery $ 函数有问题。 $ -> 转换为 $(function() {...}),它是 $(document).ready(function() {...}) 的变体,除非有人接管 jQuery 的 $,否则应该没问题。
  • 天哪.. 我真是个傻逼!非常感谢@muistooshort 的这个提示,我的 jQuery 出了点问题。当然有。我的公共文件夹中仍然有一些来自早期 heroku 部署的预编译资产.. Aaargh.. 清除了它,一切都很好,并且按预期工作.. 该死的! **再次感谢,非常感谢您的宝贵时间!
  • 别担心,有时我们都是白痴,最糟糕的错误是那些直盯着你的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
相关资源
最近更新 更多