2016-04-24 76 views
1

我在加載Gems到我的Rails 4應用時出現問題。Rails - jQuery和javascript之間的衝突

我使用jQuery。在我的application.js中,我有:

//= require jquery 
//= require bootstrap-sprockets 
//= require jquery_ujs 
//= require html.sortable 
//= require disqus_rails 
//= require moment 
//= require bootstrap-datetimepicker 
//= require pickers 
//= require main 
//= require hammer.min 
//= require jquery.animate-enhanced.min 
//= require jquery.countTo 
//= require jquery.easing.1.3 
//= require jquery.fitvids 
//= require jquery.magnific-popup.min 
//= require jquery.parallax-1.1.3 
//= require jquery.properload 
//= require jquery.shuffle.modernizr.min 
//= require jquery.sudoSlider.min 
//= require jquery.superslides.min 
//= require masonry.pkgd.min 
//= require rotaterator 
//= require smoothscrolljs 
//= require waypoints.min 
//= require wow.min 
//= require gmaps/google 
//= require chosen-jquery 
//= require cocoon 
//= require imagesloaded.pkgd.min 
//= require isotope.pkgd.min 
//= require jquery.counterup.min 
//= require jquery.pjax 
//= require custom.js 
//= require slider 
//= require dependent-fields 
//= require bootstrap-slider 

$.noConflict(); 
jQuery(document).ready(function($) { 
    // Code that uses jQuery's $ can follow here. 
    $(document).ready(function() { 
     DependentFields.bind() 
    }); 
}); 


//= require_tree . 

在我的gem文件中,我試圖使用rails依賴字段gem。那個寶石也需要underscore.js。

我認爲這個寶石不工作的原因是因爲它使用JavaScript。

我在與disqus軌寶石同樣的問題(這是提高是本地主機/錯誤:94遺漏的類型錯誤:$不是一個函數

有誰知道如何解決衝突軌之間的jQuery和?JavaScript的

回答

0

嘗試包在您使用$變量,匿名函數的JavaScript代碼:

(function($){ 

// put your code here 

})(jQuery); 
+0

當我嘗試在我的underscore.js文件中,我仍然無法得到依賴字段的軌道部分工作。 – Mel

1

的問題是,你已經設置的jQuery通過這條線在noConflict模式下工作:$.noConflict();。 jQuery將不會在全局中定義$變量,並且只能通過jQuery變量提供。

$.noConflict(); // <===== HERE ====== 
jQuery(document).ready(function($) { 
    // Code that uses jQuery's $ can follow here. 
    $(document).ready(function() { 
     DependentFields.bind() 
    }); 
}); 

「插件」被提出這個錯誤很可能希望$變量設置。但是他們不應該那樣做。

你有2種選擇:

  1. application.js文件中刪除$.noConflict();線。
  2. 將引發該錯誤的代碼換算爲$設置爲jQuery變量的函數。

像這樣:

(function($){ 
    // Here: $ === jQuery 
    // Put js code that raises error here 
})(jQuery); 

此外,您使用的是你的代碼2個文件準備事件。你可以改進它:

$.noConflict(); 
jQuery(document).ready(function($) { 
    // Code that uses jQuery's $ can follow here. 
    DependentFields.bind() 
}); 
+0

但代碼是寶石。我如何包裝? – Mel

+0

我明白了。你需要去第一個選項並刪除'$ .noConflict();'行。否則,在GitHub上找到gem並創建一個改進的pull請求。 – Uzbekjon

+0

我不明白。我是否將寶石文件作爲選項1包裝在您建議的代碼中? – Mel