2012-04-27 3 views
3

私はこのフォーラムとインターネットを検索してこれに対する答えを探しましたが、正しい解決策を見つけることができない/完全にわかりません...すべてのjQuery変数をPJax with Railsでロードする

私は以前、簡単なスライドショーを表示するためのレールアプリケーションをセットアップしました。ここでは、jQueryを使用して、コンテナを移動して次のスライドを表示します。私はpxaxを実装して、フルページではなくイールドをロードすることにしました。私のjQueryを除いて、これはすべて正常に動作します。イベントが再び発生するというon()デリゲートを追加すると、window = $(window)やdiv = $(div)などの初期変数は機能しなくなります。

$(function() { 

var presentation_carousel = $('.carousel') 
var carousel_width = $(".slide").length * 700; 
var carousel_max_next = ((carousel_width - 700) * -1); 

var view_window = $(window); 
var nav_collapse = $('div.nav-collapse'); 

presentation_carousel.css('width', carousel_width+"px") 

$('.button_next').on ('click', function(e) { 
    $('.button').animate({ 
     opacity: 0 
    }, 100) 
    presentation_carousel.animate({ 
     'marginLeft' : "-=700px" 
    }, 500, function(){ 
     $('.button').css('display', 'block'); 
     $('#quiz_carousel .button_next').css('display', 'none'); 

     $('.button').animate({ 
      opacity: 1 
     }, 500) 
    }) 
}); 

具体的には、presentation_carousel divのダイナミックサイズ変更はもう行われません。私はまた、標準のconsole.logをドキュメントのreadyタグの中に追加すると、もはや起動されないことに気付きましたか?

pjaxが標準のjQueryでどのように動作するのか、誰かが私のコードで私を助けてくれるかどうかを説明できたらうれしいですね。

私は関数の中の変数を使用せず、代わりにdomを渡すことですべての作業を行っていました。これは少しハッキリでした。

presentation_carousel.animate({}) 
// became 
$('.carousel').animate({}) 

これに関するヘルプやアドバイスは大歓迎です。私はRailsに慣れていないし、jQueryの乾燥や改善についての提案は常に開いている。

はありがとう

編集:レイアウトでapplication.html.erbから 発揮します。これは歩留まりが呼び出される唯一の場所であり、メインコンテナdiv内にあります。

<div class="span9"> 
    <div data-pjax-container> 
    <%= yield %> 
    </div> 
</div> 
+0

デモページなしでこのコードを分析するのは難しいです。カルーセルはページのメインコンテンツの内側か外側か(pjaxによって更新されますか?) jquery-pjaxは便利ないくつかのイベントを発生させます - pjax:start、pjax:endなど。 –

+0

こんにちは、残念ながら私の上司はデモページをインターネットに載せたくありません。これは私の同じマークアップスタイルですhttp://www.ajaxdaddy.com/demo-jquery-carousel.html –

+0

[jquery-pjax events](https://github.com/defunkt/jquery-pjax #events)十分でしょうか? '$(document).on(" pjax:end "、handler)'は '$(document).ready(handler)'とおおまかに等価です。当然のことながら、最初のページの読み込みの準備ができているハンドラが必要です。 –

答えて

1

ビルトインjquery-pjax eventsは十分かもしれません。 $(document).on("pjax:end", handler)は、$(document).ready(handler)とおおよそ同等です。当然のことながら、最初のページの読み込みの準備ができているハンドラが必要です。 ;)