【问题标题】:Materialize 1.0.0 gem not allowing jquery functions物化 1.0.0 gem 不允许 jquery 函数
【发布时间】:2019-04-10 13:47:59
【问题描述】:

使用 materialize 1.0.0 gem,我不断收到“未捕获的 TypeError:sideNav”或“下拉菜单不是函数”,并已恢复到 0.100.2 版本的 materialize 以使工作正常。我知道这来自 jquery 并且物化没有像他们应该的那样一起工作,所以如果有人对这个问题有任何见解,我将不胜感激,以便我可以开始使用 1.0.0。

这是一些代码。如果您需要更多,请告诉我。

应用程序.js

 //= require rails-ujs
 //= require turbolinks
 //= require activestorage
 //= require jquery
 //= require materialize

application/layouts/shared/_header.html.erb

   <nav>
    <div class="nav-wrapper">
     <a href="#!" class="brand-logo">Logo</a>
     <a href="#" data-target="mobile-demo" class="sidenav-trigger"><i class="material-icons">menu</i></a>
      <ul class="right hide-on-med-and-down">
        <li><a href="sass.html">Sass</a></li>
        <li><a href="badges.html">Components</a></li>
        <li><a href="collapsible.html">Javascript</a></li>
        <li><a href="mobile.html">Mobile</a></li>
      </ul>
    </div>
   </nav>

   <ul class="sidenav" id="mobile-demo">
     <li><a href="sass.html">Sass</a></li>
     <li><a href="badges.html">Components</a></li>
     <li><a href="collapsible.html">Javascript</a></li>
     <li><a href="mobile.html">Mobile</a></li>
   </ul>

   <script>
      $(document).ready(function(){
       $('.sidenav').sidenav();
      });
   </script>

我也尝试过恢复到旧版本的 jquery-rails gem,但我的应用程序中的其他 gem 至少依赖 4.2 并且恢复到这个版本似乎不是一个选项。

【问题讨论】:

  • 我可能会问一个明显的问题......你是否包含了materializecss脚本文件?
  • 是的,我明白了。但我刚刚偶然发现了一个链接,它让我意识到我的 javascript 文件夹中缺少一个咖啡脚本。我会把它作为答案发布,这样如果其他人有同样的问题,这应该会有所帮助。

标签: ruby-on-rails-5 materialize


【解决方案1】:

好吧,伙计们,我做了更多的研究,并在 GitHub 上发现了一篇文章,它帮助我意识到我的问题是 jquery 的一个版本是错误的,我实际上需要在我的 assets/javascript 文件夹中添加一个咖啡脚本帮助事情。 https://github.com/mkhairi/materialize-sass/issues/176

这在我之前从未发生过,因为 0.100.2 从未需要它。希望这可以帮助任何偶然发现这篇文章并遇到同样问题的人。

这是我添加的文件。

assets/javascripts/init.coffee

$(document).on 'turbolinks:before-visit turbolinks:before-cache', ->
  elem = document.querySelector('#slide-out');
  instance = M.Sidenav.getInstance(elem) if elem
 if instance
  instance.close() if instance.isOpen #close on click
  instance.destroy()

 $(document).on 'turbolinks:before-visit turbolinks:before-cache', ->
  $('.toast').remove()

 $(document).on 'turbolinks:load', ->
  elem = document.querySelector('#slide-out');
  instance = new M.Sidenav(elem, {}) if elem

 $(document).on 'turbolinks:load', ->
  Waves.displayEffect()

 # Reset
 M.Modal._count = 0;
 M.ScrollSpy._count = 0;

$('.modal').modal();
$('.carousel').carousel();
$('.collapsible').not('.expandable').collapsible();
$('.collapsible.expandable').collapsible({accordion: false});
$('.tap-target').tapTarget();

$('.slider').slider();
$('.parallax').parallax();
$('.materialboxed').materialbox();

$('.scrollspy').scrollSpy();
$('.datepicker').datepicker();
$('.timepicker').timepicker();
$('.tooltipped').tooltip();
$('.dropdown-trigger').dropdown();

#form
M.updateTextFields()
$('select').not('.disabled').formSelect();

$('input.autocomplete').autocomplete data:
 'Apple': null
 'Microsoft': null
 'Google': 'http://placehold.it/250x250'
$('input[data-length], textarea[data-length]').characterCounter();


 $('.tabs').tabs();
 # Swipeable Tabs Demo Init
 if $('#tabs-swipe-demo').length
  $('#tabs-swipe-demo').tabs 'swipeable': true

 # Chips

 # Handle removal of static chips.
 $(document.body).on 'click', '.chip .close', ->
  $chips = $(this).closest('.chips')
   if $chips.length and $chips[0].M_Chips
  return
  $(this).closest('.chip').remove()

  $('.chips').chips()
  $('.chips-initial').chips
   readOnly: true
  data: [
   { tag: 'Apple' }
   { tag: 'Microsoft' }
   { tag: 'Google' }
  ]
 $('.chips-placeholder').chips
  placeholder: 'Enter a tag'
  secondaryPlaceholder: '+Tag'
 $('.chips-autocomplete').chips autocompleteOptions: data:
  'Apple': null
  'Microsoft': null
  'Google': null

 # Fab
 $('.fixed-action-btn').floatingActionButton()
 $('.fixed-action-btn.horizontal').floatingActionButton direction: 'left'
 $('.fixed-action-btn.click-to-toggle').floatingActionButton
  direction: 'left'
  hoverEnabled: false
 $('.fixed-action-btn.toolbar').floatingActionButton toolbarEnabled: true


 console.log "load init on ready or turbolinks:load"

这很容易解决。 Sidenav 和下拉菜单现在很好用!

【讨论】:

    猜你喜欢
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 2016-08-24
    • 2020-04-10
    相关资源
    最近更新 更多