我正在研究rails app并且看到奇怪的行为,我认为这是由铁路资产在开发中多次加载造成的。
我在Chrome中工作,并标记了Developer Tools -> Network -> "disable cache"
复选框,这使得js和css资产只加载一次,并使所有内容按预期/期望工作。
但是,当我取消选中"disable cache"
框时,资产开始多次加载,并打出一次中断,抛出:Uncaught TypeError: $(...).typeahead is not a function
。
重现的步骤:
git clone https://github.com/duhaime/chalkboard.git
cd chalkboard
rake sunspot:solr:start
rake db:drop db:create db:migrate db:seed
rake sunspot:solr:reindex
rails s
# visit localhost:3000 and enable/disable cache (then refresh) in Chrome
我相信可以通过禁用Rails中的缓存(而不是浏览器客户端)来解决此错误,但我想问一下是否有正确的方法来解决这种情况而不禁用缓存。我已经阅读了这个问题上的许多其他SO线程,但还没有找到可行的解决方案。我非常感谢其他人可以就这个问题提出的建议!
答案 0 :(得分:0)
typeahead失败的原因是我通过app/assets/javascripts/application.js
文件导入它:
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require twitter/typeahead
//= require_tree .
我正在使用<%= javascript_include_tag 'typeahead' %>
。更糟糕的是,typeahead包括调用导入typeahead.bundle.js
版本0.11.1,并且我安装了gem twitter-bootstrap-rails
版本0.10.5。
我删除了所有<%= javascript_include_tag '{package}' %>
,从typeahead.bundle.js
目录中删除了/assets
文件,$(...).typeahead is not a function
错误消失了。我会在这里留下这个问题,万一它会帮助别人。