2012-01-21 102 views
1

我最近有一個小問題使用jofery插件與coffeescript(在Rails 3.1資產管道,如果有幫助)。我環顧了一下,但無法弄清楚,爲什麼這樣表現。Coffeescript和jQuery TypeError

那麼,爲什麼這是不行的(在談論在$(角呼叫)「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()') 

,如果我離開它在那裏..也許我只是盲目的權利,但我無法弄清楚爲什麼我不能把它留在那裏。即使編譯的代碼看起來是合法的(至少對我來說它確實;-))。

非常感謝您的時間和澄清。

馬塞爾

UPDATE 下面是一些相對碼:

# 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 /視圖/幻燈片/ _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(); 
    }); 
+0

'sortable'與這個有什麼關係?任何看到最小案例的機會都會重現問題?該錯誤表明角色插件在您嘗試使用它時未加載,我期望第一個人比第二個人有更好的工作機會。 –

+0

嘿, 我在那裏留下了可排序代碼,至少在$ - > 中有一些代碼,我認爲這可能會更清晰,因爲我還提到了我所說的內容。 但是,根據我的分析器,角落插件是肯定加載之前,在那裏的咖啡代碼。對我來說,第一個例子也更有意義,但它不起作用。 完全不可思議.. –

+0

你能看看'$ .fn.corner'並看看裏面有什麼嗎?可能有兩件事想要使用「角落」名稱? –

回答

0

好了,問題是,我在我的軌道公用文件夾一些預編譯的資產(舊的東西),這是有點搞亂我的jQuery調用。清理它,瞭解我的減肥,現在一切正常。

無論如何,非常感謝這麼多傢伙,我非常感謝你的幫助!

+0

聽起來像是在和你的jQuery'$'函數搞混了。 '$ - >'轉換爲'$(function(){...})'這是'$(document).ready(function(){...})的一個變體',那應該沒問題,除非有人我們接管了jQuery的''''。 –

+0

哦,我的天啊..我真是個白癡!非常感謝@ muistooshort這個暗示,那些東西與我的jQuery搞混了。當然有。我仍然有一些預先編譯好的資產從早期的heroku部署在我的公共文件夾中.Aaargh ..清除了它,一切都很好,並且它的工作原理應該是......該死! **再次感謝,我真的很感謝你的時間!** –

+0

不用擔心,我們有時候都是白癡,而最糟糕的錯誤就是那些直視你的臉。 –