2012-01-21 7 views
1

私は最近、coffeescriptでjqueryプラグインを使用すると少し問題がありました(これは、Rails 3.1アセットパイプライン内で役立ちます)。私はちょっと見渡しましたが、なぜこのように振る舞うのか、実際には分かりませんでした。CoffeescriptとjQuery TypeError

それでは、なぜこれが動作しない($(上のコーナーコールの話)「overlaybox。」):

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

    $(".overlaybox").corner() 

が、これは動作しません(コーナーはjQueryの準備ができ事の外に呼び出しました) :私は...そこにそれを残す場合はたぶん私は今ちょうど盲目だけど、私

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

を得続ける

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

$(".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() 

そしてビュー(アプリ/ビュー/スライド/ _form.html):

マルセル

UPDATE は、ここではいくつかの相対的なコードです。面白いのは、jquery document readyイベントから取り除くとすぐに、コーナーが機能することです。 私はこれのすべての範囲に関して実質的な何かを失っていると思います: コーナーの$ - >内にconsole.logを実行すると、私は未定義となります。しかし、私が$ - >(実際には以下)の外で同じことをすると、私は適切な出力を得て、jquery(もちろん)の前であっても起動します。しかし、なぜそれはjQueryブロックで利用できないのですか?それは私が行方不明のcoffeescriptの範囲のものですか? (私は今、別のプラグインで同じ問題を抱えています)

ありがとうございました!

ことが

$(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

「整列可能」とは何ですか?最小限のケースを見てしまうと、問題が再現されますか?このエラーは、コーナープラグインが使用しようとしたときにロードされていないことを示しています。最初のプラグインは、2番目のプラグインよりもうまく動作する可能性が高いと思います。 –

+0

ちょっと、 $ - > の中に少なくともいくつかのコードを入れるためにソート可能なコードを残しました。 しかし、私のプロファイラによれば、コーパスプラグインは間違いなくcoffeescriptコードの前にロードされています。そして私には、最初の例はもっと意味がありますが、うまくいきません。 全く変わった.. –

+0

'$ .fn.corner'を見てそこにあるものを見ることができますか? 「コーナー」名を使用したいと思う2つのことがありますか? –

答えて

0

さて、問題は、私は私のレールのパブリックフォルダ内のいくつかのプリコンパイルされた資産(古いもの)を持っていたこと、だったちょっといじったことができます場合は、ここで、また、コンパイルされたJavaScriptコードです私のjQueryが呼び出す。それをクリアし、私のレッスンを学んだ。

とにかくおかげさまで、本当にありがとうございます!

+0

あなたのjQuery '$'関数が何かのような音をしています。 '$ - >'は '$(document).ready(function(){...})の変形である' $(function(){...}) 'に変換されます。私たちはjQueryの '$'を引き継いだ。 –

+0

ああ私の神。私はそんなに馬鹿だ!このヒントのために非常に@muistooshortをありがとう、何かが私のjQueryを乱している。もちろんありました。以前のヒーローからのプリコンパイルされた資産が私のパブリックフォルダに展開されていました.Aaargh ..それをクリアして、すべてうまくいきました。 **もう一度お礼を申し上げます。** –

+0

心配する必要はありません。私たちは時々すべての馬鹿です。そして、最悪のバグは、あなたを真っ直ぐあなたを見つめているものです。 –