2016-04-24 66 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