2011-11-09 64 views
0

我的頁面在本地工作之前,它只是一個靜態的HTML頁面與jQuery。但是,我在軌道上建立它,因爲我想要在heroku上免費的網絡託管。讓jQuery在rails應用上工作

我所做的只是將jQuery移動到application.js文件中,並更改了application.html.erb文件,因爲這就是所需要的,對吧?

,我有以下包含在我的Gemfile:

gem 'sqlite3' 
gem 'jquery-rails' 
gem 'thor' 

這是我的Application.html.erb文件:

 <head> 
      <title>Me</title> 
      <%= stylesheet_link_tag :all %> 
    <%= javascript_include_tag "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" %> 
    <%= javascript_include_tag "http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" %> 
    <%= javascript_include_tag "jquery-rails.js" %> 
    <%= javascript_include_tag "jquery.fancybox-1.3.4.js" %> 
    <%= javascript_include_tag "jquery.fancybox-1.3.4.pack.js" %> 
    <%= javascript_include_tag "jquery.fancybox-1.3.4.css" %> 
    <%= javascript_include_tag "jquery.easing-1.3.pack.js" %> 
    <%= javascript_include_tag "jquery.mousewheel-3.0.4.pack.js" %> 
    <%= render 'layouts/stylesheets' %> 
    <%= csrf_meta_tag %> 
     </head> 

,這是我的application.js文件:

// Place your application-specific JavaScript functions and classes here 
// This file is automatically included by javascript_include_tag :defaults 

      $("a#example1").fancybox(); 

      $("a#example2").fancybox({ 
       'overlayShow' : false, 
       'transitionIn' : 'elastic', 
       'transitionOut' : 'elastic' 
      }); 

      $("a#example3").fancybox({ 
       'transitionIn' : 'none', 
       'transitionOut' : 'none'  
      }); 

      $("a#example4").fancybox({ 
       'opacity'  : true, 
       'overlayShow' : false, 
       'transitionIn' : 'elastic', 
       'transitionOut' : 'none' 
      }); 

      $("a#example5").fancybox(); 

      $("a#example6").fancybox({ 
       'titlePosition'  : 'outside', 
       'overlayColor'  : '#000', 
       'overlayOpacity' : 0.9 
      }); 

      $("a#example7").fancybox({ 
       'titlePosition' : 'inside' 
      }); 

      $("a#example8").fancybox({ 
       'titlePosition' : 'over' 
      }); 

      $("a[rel=example_group]").fancybox({ 
       'transitionIn'  : 'none', 
       'transitionOut'  : 'none', 
       'titlePosition'  : 'over', 
       'titleFormat'  : function(title, currentArray, currentIndex, currentOpts) { 
        return '<span id="fancybox-title-over">Image ' + (currentIndex + 1) + '/' + currentArray.length + (title.length ? ' &nbsp; ' + title : '') + '</span>'; 
       } 
      }); 

      /* 
      * Examples - various 
      */ 

      $("#various1").fancybox({ 
       'titlePosition'  : 'inside', 
       'transitionIn'  : 'none', 
       'transitionOut'  : 'none' 
      }); 

      $("#various2").fancybox(); 

      $("#various3").fancybox({ 
       'width'    : '75%', 
       'height'   : '75%', 
       'autoScale'   : false, 
       'transitionIn'  : 'none', 
       'transitionOut'  : 'none', 
       'type'    : 'iframe' 
      }); 

      $("#various4").fancybox({ 
       'padding'   : 0, 
       'autoScale'   : false, 
       'transitionIn'  : 'none', 
       'transitionOut'  : 'none' 
      }); 
     }); 
+0

您是否檢查了在請求頁面時是否將正確的.js文件交給瀏覽器? Firefox中的Firebug會很快顯示出來。或者你能更好地解釋「不工作」是什麼意思? –

+0

有趣。它表示未被捕獲的類型錯誤:對象#沒有方法'fancybox'。 – Tony

+0

你需要包含fancybox.js ...你錯過了 –

回答

1

刪除

<%= javascript_include_tag :defaults %> 

因爲它增加了原型(如果你仍然使用〜2.x到3.0.x)。

此外,它似乎你正在嘗試使用fancybox,但沒有包括fancybox必要的JS文件。

首頁複印的jquery.fancybox-x.x.x.pack.jspublic/js/ 然後包括這個標籤

<%= javascript_include_tag "jquery.fancybox-x.x.x.pack.js" %> 
+0

那不幸的是。 – Tony

+0

但我確實理解涉及原型和jQuery的衝突。無論如何我都將其刪除,以防止未來的衝突。 – Tony

1

你嘗試過包裝所有這些功能在

$(document).ready(function(){ 

    // your scripts here 

}); 

腳本可能已在本地工作,只是因爲加載頁面速度足以讓腳本在那裏找到您的內容。哦,如果你刪除了javascript_include_tag :default,你必須自己包括application.js

+0

嗯,很好的解決方案,但不幸的是它沒有解決。我想我會在我再次解決這個問題之前對rails的jQuery有一個很好的理解。奇怪的是 – Tony

+0

。更好地使用firebug或chrome開發工具來看看發生了什麼......如果你使用rails 3.1,我聽說資產管道可以通過腳本產生奇怪的效果......也許是領先的? –